思路:
dfs不断递归
1:如果走过重复的路,则无法出去
2:如果出去则成功
#include<iostream> #include<iomanip> #include<cstring> using namespace std; string data[10]; int ans; int vis[10][10]; bool solve(int i,int j){ if(i<0||i>9||j<0||j>9) return true;//跑出矩阵成功出去 if(vis[i][j]==1) return false;//有重复的路径则无法出去,进入死循环 vis[i][j]=1;//标记走过的位置 switch(data[i][j]){ case 'U'://进行移动 return solve(i-1,j); case 'D': return solve(i+1,j); case 'L': return solve(i,j-1); case 'R': return solve(i,j+1); default: return false; } } int main(int argc,const char *argv[]){ data[0]="UDDLUULRUL"; data[1]="UURLLLRRRU"; data[2]="RRUURLDLRD"; data[3]="RUDDDDUUUU"; data[4]="URUDLLRRUU"; data[5]="DURLRLDLRL"; data[6]="ULLURLLRDU"; data[7]="RDLULLRDDD"; data[8]="UUDDUDUDLL"; data[9]="ULRDLUURRR"; for(int i=0;i<10;i++){//对每一个人dfs for(int j=0;j<10;j++){ memset(vis,0,sizeof(vis));//清零轨迹 bool res=solve(i,j);//dfs判断是否可以出去 if(res) ans++; } } cout<<ans<<endl; return 0; }