洛谷 P1605 迷宮 dfs+回溯
阿新 • • 發佈:2018-12-16
//dfs+回溯 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int sx,sy,fx,fy,zx,zy;//zxzy分別代表障礙的起點和終點 int n,m,t; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; int obs[8][8];//代表障礙 int walk[8][8];//代表走過了 int ans=0; void dfs(int x,int y) { if(x<1||x>n||y<1||y>m)//越界了 return ; if(walk[x][y]==1) return ;//代表走過了 if(obs[x][y]==1)return ; if(x==fx&&y==fy)//代表到終點了 { ans++; return ; } for(int i=0;i<4;i++) { walk[x][y]=1;//代表走過了 //接下來就要回溯了 dfs(x+dir[i][0],y+dir[i][1]) ; walk[x][y]=0; } } int main() { int x,y; cin>>n>>m>>t; cin>>sx>>sy>>fx>>fy; for(int i=0;i<t;i++) { cin>>x>>y; obs[x][y]=1;//標記障礙 } dfs(sx,sy); printf("%d",ans); return 0; }