1 solutions
-
0
这题主要就是理解题意
先把所有的路抽象处理形成一个矩阵,而每一个红绿灯就是一个障碍。
即在绕过所有障碍的情况下,求起点到终点的路线总数
#include<cstdio> #include<iostream> using namespace std; int n,m,t,sx,sy,fx,fy,ans; bool vis[10][10];//标记是否走过 bool mp[10][10];//标记是否有障碍 int Xx[]={1,0,-1,0};//x方向可以走的选择 int Yy[]={0,-1,0,1};//y方向可以走的选择 void dfs(int x,int y) { if(x==fx&&y==fy)//搜索终止的条件 { ans++; return;//返回 } for(int i=0;i<4;i++)//上下左右四个方向 { int dx=Xx[i]+x; int dy=Yy[i]+y;//下一个坐标 ,Xx[],Yy[]实现坐标的移动 if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&!mp[dx][dy])//是否已走过&&是否有障碍 { vis[x][y]=1;//原先的标记为已走过 dfs(dx, dy); vis[x][y]=0;//回溯 } } } int main() { cin>>n>>m; cin>>t; while(t--) { int x,y; cin>>x>>y; mp[x][y]=1; } cin>>sx>>sy>>fx>>fy; dfs(sx,sy);//从起点开始深搜 if(ans!=0) cout<<ans<<endl; else cout<<" BACK ON THE SAME WAY"<<endl; return 0; }
- 1
Information
- ID
- 181
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 184
- Accepted
- 24
- Uploaded By