HDOJ HDU 1035 Robot Motion
2017-09-07 20:50
260 查看
HDOJ 1035 Robot Motion
题目
点此查看 HDOJ 1035 Robot Motion分类
dfs题意
机器人走迷宫输入三个数 n m r
表示 n*m的迷宫 机器人从(1,r)进入
此题不同在于 机器人遇到循环
出迷宫 输出 需要步数
进入循环 输出 循环步数
题解
按题意dfs即可但是在做 标记时要记录步数
再 重复遇到标记时 用当前步数 减去 循环位置记录的步数 即为循环步数
代码
#include <iostream> #include <cstring> #define max 100 using namespace std; int r,c; char map[100][100]; int vis[100][100]; int dir[4][2] = {-1.0,0,1,1,0,0,-1}; bool ext; int dfs(int x,int y,int & d); int main() { int n,d,v; while(cin >> r >> c && r && c) { memset(vis,0,sizeof(vis)); ext = false; v = d = 1; cin >> n; for(int i = 0;i < r;i++) for(int j = 0;j < c;j++) cin >> map[i][j]; vis[0][n-1] = d; v = dfs(0,n-1,d); if(ext) cout << d << " step(s) to exit" << endl; else cout << v-1 << " step(s) before a loop of " << d-v+1 << " step(s)"<< endl; } return 0; } int dfs(int x,int y,int & d) { switch(map[x][y]) { case 'N' : if(x-1 < 0) { ext = true; return d; } if(vis[x-1][y]) { return vis[x-1][y]; }d++; vis[x-1][y] = d; return dfs(x-1,y,d); break; case 'S' : if(x+1 >= r) { ext = true; return d; } if(vis[x+1][y]) return vis[x+1][y]; d++; vis[x+1][y] = d; return dfs(x+1,y,d); break; case 'W' : if(y-1 < 0) { ext = true; return d; } if(vis[x][y-1]) return vis[x][y-1]; d++; vis[x][y-1] = d; return dfs(x,y-1,d); break; case 'E' : if(y+1 >= c) { ext = true; return d; } if(vis[x][y+1]) return vis[x][y+1]; d++; vis[x][y+1] = d; return dfs(x,y+1,d); break; } return 0; }
相关文章推荐
- hdu 1035 Robot Motion
- hdu 1035 Robot Motion (DP)
- HDU 1035 Robot Motion(水题,模拟)
- 【HDU】 1035 Robot Motion
- hdu 1035 Robot Motion
- POJ 1573 && hdu 1035 Robot Motion【简单模拟】
- hdu 1035 Robot Motion
- HDU 1035 Robot Motion
- HDU 1035 Robot Motion
- hdoj 1035 Robot Motion
- hdu 1035 Robot Motion(模拟)
- poj1573&&hdu1035 Robot Motion(模拟)
- hdu 1035 Robot Motion
- POJ 1573 && hdu 1035 Robot Motion(简单模拟)
- [ACM] hdu 1035 Robot Motion (模拟或DFS)
- HDU 1035 Robot Motion
- HDU 1035 Robot Motion
- HDU 1035 && poj 1573 Robot Motion【模拟】
- poj1573&&hdu1035 Robot Motion(模拟)
- POJ 1573 && hdu 1035 Robot Motion【简单模拟】