水!
#include<stdio.h> #include<string.h> int dir[][2]={{-1,0},{1,0},{0,-1},{0,1}}; int g[10][10]; bool vis[10][10]; struct node { int x,y; }queue[1000]; int pre[11][11]; void pri(int x,int y) { int i,j,top=0; int tempx,tempy,p=pre[x][y]; tempx=x-dir[p][0];tempy=y-dir[p][1]; queue[top].x=x;queue[top].y=y;top++; while(1) { if(tempx==0&&tempy==0) break; queue[top].x=tempx;queue[top].y=tempy;top++; p=pre[tempx][tempy]; tempx=tempx-dir[p][0];tempy=tempy-dir[p][1]; } printf("(0, 0)\n"); for(i=top-1;i>=0;i--) { printf("(%d, %d)\n",queue[i].x,queue[i].y); } } void solve() { int front,rear,step,i,j; front=0;rear=0; rear++; queue[rear].x=0; queue[rear].y=0; step=0; memset(vis,true,sizeof(vis)); vis[0][0]=false; while(rear!=front) { front++; if(queue[front].x==4&&queue[front].y==4) { pri(queue[front].x,queue[front].y); return ; } for(i=0;i<4;i++) { int tempx=queue[front].x+dir[i][0]; int tempy=queue[front].y+dir[i][1]; if(tempx>=0&&tempx<5&&tempy>=0&&tempy<5) { if(!g[tempx][tempy]&&vis[tempx][tempy]) { rear++; vis[tempx][tempy]=false; queue[rear].x=tempx;queue[rear].y=tempy; pre[tempx][tempy]=i; } } } } } int main() { int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) { scanf("%d",&g[i][j]); } solve(); return 0; }