這幾天比較頹= = ~~~~效率幾乎爲零php
原題:http://acm.hdu.edu.cn/showproblem.php?pid=1035ios
題意:oop
一個迷宮每一個格子都有{W(左走),E(右走),S(下走),N(上走)}中的一個字符,表示下一步行走方向;spa
輸入:code
迷宮的 縱向長度m和橫向長度n 以及 起點:[0][x];遞歸
輸出若是能走出去輸出:ci
(ans) step(s) to exit; 若是出不去 存在循環輸出(幾步以後)step(s) before a loop of (幾個格子的循環) step(s)我能想到的是寫個遞歸……應該是……map[][]構造迷宮;visit[][]記錄是否被訪問;而後兩個變量,一個記錄步數(有循環則爲進入循環前的),一個記錄循環長度(若爲0則不輸出)(人太頹了,回來貼代碼- - ,先去睡會兒++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char map[15][15]; int vis[15][15]; int r,c,st; int loop,step; int dfs(int x,int y,int num) { if(x>r||x<1||y<1||y>c) { cout<<num-1<<" step(s) to exit"<<endl; return 0; } if(vis[x][y]) { cout<<vis[x][y]-1<<" step(s) before a loop of "; return 1; } vis[x][y]=num; if(map[x][y]=='N') { if(dfs(x-1,y,num+1)==1) cout<<vis[x][y]-vis[x-1][y]+1<<" step(s)"<<endl; } else if(map[x][y]=='S') { if(dfs(x+1,y,num+1)==1) cout<<vis[x][y]-vis[x+1][y]+1<<" step(s)"<<endl; } else if(map[x][y]=='E') { if(dfs(x,y+1,num+1)==1) cout<<vis[x][y]-vis[x][y+1]+1<<" step(s)"<<endl; } else { if(dfs(x,y-1,num+1)==1) cout<<vis[x][y]-vis[x][y-1]+1<<" step(s)"<<endl; } return 0; } int main() { while(cin>>r>>c>>st,r&&c) { memset(vis,0,sizeof(vis)); for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cin>>map[i][j]; dfs(1,st,1); } return 0; }