标签:for 编号 它的 ... 不能 输出 || 最短路 clu
思路:
1.BFS,需要注意的就是打印的是路径点。所以需要储存路径最后再输出。储存路径:在走每一个节点时记录它的父节点的编号。
2.当然因为这个题就一组数据可以肉眼观测打表做...
坑点:输出格式(a, b)b左边有个空格...
1 #include<cstdio> 2 #include<queue> 3 using namespace std; 4 int map[5][5]; 5 int dir[4][2]={{1,0},{0,-1},{-1,0},{0,1}}; 6 7 struct node{ 8 int x,y,pre,n;//n为编号,pre为父节点的编号 9 }p[100]; 10 11 void print(int i){ 12 if(p[i].pre!=-1) { 13 print(p[i].pre); 14 printf("(%d, %d)\n",p[i].x,p[i].y); 15 } 16 else{ 17 printf("(%d, %d)\n",p[i].x,p[i].y); 18 } 19 } 20 21 void bfs(){ 22 int cnt=0; 23 p[cnt].x=0,p[cnt].y=0,p[cnt].pre=-1; 24 map[0][0]=1; 25 queue<node>q; 26 node head,next; 27 head.x=0,head.y=0,head.n=0; 28 q.push(head); 29 while(!q.empty()){ 30 31 head=q.front(); 32 q.pop(); 33 34 if(head.x==4&&head.y==4){ 35 print(cnt); 36 return; 37 } 38 39 for(int i=0;i<4;i++){ 40 next.x=head.x+dir[i][0]; 41 next.y=head.y+dir[i][1]; 42 43 if(next.x<0||next.x>4||next.y<0||next.y>4||map[next.x][next.y]) continue; 44 45 map[next.x][next.y]=1; 46 cnt++; 47 next.n=cnt; 48 p[cnt].x=next.x,p[cnt].y=next.y; 49 p[cnt].pre=head.n; 50 q.push(next); 51 } 52 } 53 } 54 55 int main(){ 56 for(int i=0;i<5;i++) 57 for(int j=0;j<5;j++) 58 scanf("%d",&map[i][j]); 59 bfs(); 60 return 0; 61 }
打表:
1 #include<cstdio> 2 using namespace std; 3 int main(){ 4 printf("(0, 0)\n(1, 0)\n(2, 0)\n(2, 1)\n(2, 2)\n(2, 3)\n(2, 4)\n(3, 4)\n(4, 4)\n"); 5 return 0; 6 }
标签:for 编号 它的 ... 不能 输出 || 最短路 clu
原文地址:https://www.cnblogs.com/yzhhh/p/9974699.html