Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么dfs错了,还时间很长?#include <cstdio> #include <iostream> #include <cstring> using std::cin; //#include <conio.h> const int MAXN=1000+1; bool vis[MAXN][MAXN]; char maze[MAXN][MAXN]; int cnt; int i,j,k; int num; int steps; int R,S; char s[MAXN+1]; bool dfs(int i,int j) { if(!vis[i][j])vis[i][j]=true; else return false; if(++steps==R+S-2) { if(i==R-1&&j==S-1)num++; return true; } if( maze[i-1][j]=='.'&& i-1>=0 ){if(dfs(i-1,j)){vis[i-1][j]=false;steps--;}} if( maze[i][j-1]=='.' && j-1>=0 ){if(dfs(i,j-1)){vis[i][j-1]=false;steps--;}} if( maze[i+1][j]=='.'&& i+1<R){if(dfs(i+1,j)){vis[i+1][j]=false;steps--;}} if( maze[i][j+1]=='.'&& j+1<S){if(dfs(i,j+1)){vis[i][j+1]=false;steps--;}} return true; } int main() { //freopen("input.txt","r",stdin); scanf("%d",&cnt); char ch; while(cnt--) { scanf("%d%d",&R,&S); scanf("%c",&ch); for(i=0;i<R;i++) gets( *(maze+i) ); num=0; steps=-1; dfs(0,0); printf("Existuje %d ruznych cest.\n",num); } //getch(); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator