Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

为什么dfs错了,还时间很长?

Posted by csuyuanxing at 2010-07-23 11:43:25 on Problem 1992
#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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator