解题思路:
注意事项:
参考代码
#include<iostream> #include<queue> #include<string.h> #define N 800 using namespace std; int vis[N][N]; int df[4][4]={{1,0},{0,-1},{0,1},{-1,0}}; //最小字典序 {U D L R}{D L R U} int m,n; int map[N+2][N+2]; char dfName[4]={'D','L','R','U'}; typedef struct{ int x,y; string s; }p; void bfs(){ queue<p> Q; p cur,next; cur.x=1;cur.y=1; cur.s=""; Q.push(cur); vis[1][1]=0; while(!Q.empty()){ cur=Q.front(); Q.pop(); if(cur.x==m&&cur.y==n) { cout<<cur.s.length()<<endl<<cur.s; break; } for(int i=0;i<4;i++){ next.x=cur.x+df[i][0]; next.y=cur.y+df[i][1]; if(next.x>=1&&next.x<=m&&next.y>=1&&next.y<=n&&map[next.x][next.y]==0&&vis[next.x][next.y]==-1){ next.s=cur.s+dfName[i]; Q.push(next); vis[next.x][next.y]=vis[cur.x][cur.y]+1; } } } } int main(){ cin>>m>>n; char temp; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>temp; map[i][j]=temp-'0'; } } memset(vis,-1,sizeof(vis)); bfs(); return 0; }
0.0分
5 人评分
众数问题 (C语言代码)浏览:3510 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:603 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1008 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:3392 |
C二级辅导-公约公倍 (C语言代码)浏览:1508 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:1078 |
【计算球体积】 (C语言代码)浏览:1101 |
字符串输入输出函数 (C语言代码)浏览:2480 |
循环入门练习6 (C语言代码)浏览:953 |
小九九 (C语言描述,不看要求真坑爹)浏览:984 |