1 条题解
-
0
#include<bits/stdc++.h> using namespace std; char mapp[20][20];//保存地图 int vis[20][20];//保存走过的点 //保存的移动方向 第一列 行的变化 int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; int m,n,x,y,minn=9999999,f=0;//m行n列 ,起点x,y //判断是否超过边界 bool in(int x,int y){ return x>=0&&x<m&&y>=0&&y<n; } //算法核心 void dfs(int x,int y,int depth) { //到达目的地 if(mapp[x][y]=='*'){ if(depth<minn){//找最短距离 minn=depth; f=1; } return; } //选择的数量4 for(int k=0;k<4;k++){ int nx=x+dir[k][0]; int ny=y+dir[k][1]; //判断是否满足条件 //1、走没走过2、是不超出边界3、不能是怪物 if(!vis[nx][ny]&&in(nx,ny)&&mapp[nx][ny]!='#'){ //满足条件做选择 vis[nx][ny]=1; dfs(nx,ny,depth+1); vis[nx][ny]=0; } }
} int main(){ char ch; cin>>m>>n; for(int i=0;i<m;i++){//输入地图 for(int j=0;j<n;j++){ cin>>ch; mapp[i][j]=ch; if(ch=='@'){//记录的起始位置 x=i; y=j; } } } dfs(x,y,0); if(f==0) { cout<<"-1"<<endl; }else{ cout<<minn<<endl; } return 0; }
- 1
信息
- ID
- 1219
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 11
- 已通过
- 8
- 上传者