Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
138254 | baim. | 迷宫问题 | C++ | 编译错误 | 0 | 0 MS | 0 KB | 1297 | 2024-03-14 20:03:43 |
#include<iostream> #include<cstring> using namespace std; #define N 25 int map[N][N]; bool visited[N][N]; int flag; int next[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}}; struct point { int x,y; int pre; //本路径中上一块在队列中的下标 }; point Q[N]; void output(int z) { int k=z; while(k!=0) { printf("(%d,%d)<--",Q[k].x,Q[k].y); k=Q[k].pre; } printf("(1,1)<--"); } void bfs(int m,int n) { int i; int front=-1,rear=-1; memset(visited,0,sizeof(visited)); rear++; Q[rear].x=1; Q[rear].y=1; Q[rear].pre=-1; visited[1][1]=1; while(front<=rear&&!flag) { front++; point temp=Q[front]; if(Q[front].x==m&&Q[front].y==n) { flag=1; output(front); return ; } for(i=0;i<7;i++) { int x=temp.x+next[i][0]; int y=temp.y+next[i][1]; if(map[x][y]==0&&!visited[x][y]) { visited[x][y]=1; if(x>=1&&x<=m&&y>=1&&y<=n) { rear++; Q[rear].x=x; Q[rear].y=y; Q[rear].pre=front; } } } } } int main() { int i,j; int m,n; while(cin>>m>>n) { for(i=1;i<=m;i++) for(j=1;j<=n;j++) cin>>map[i][j]; flag=0; bfs(m,n); } return 0; }