zoj 3332 Strange Country II (dfs)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3332

看XSY博客有这题,就做一下,结果够让人郁闷的,太粗心了...

一开始用的宏比较多,出了个没见过的错 Segmentation Fault ,这个好像类似与POJ的RE,内存错误。搞不懂,直接去掉了宏。

然后就开始WA了,impossible写成了impossbile,改正,依旧WA,发现i是大写的...

继续改正,还是WA,换了好多种dfs的方式,没用。没办法,瞎改吧。把dfs中定义的全局变量j改成局部变量,AC了...

这么简单的一道暴搜搞成了这个样子,引以为戒吧,粗心的后果就是浪费大把的时间啊。

code:

#include <cstring>
#include <cstdio>
using  namespace std ;
int data[ 105][ 105], ans[ 105] ;
bool vis[ 105] ;
int count, n, flag ;
void dfs( int x){
    ans[++count] = x ;
     if(count==n){
        flag =  1 ;
         return ;
    }
     for( int j= 1; j<=n; j++){
         if(vis[j]||!data[x][j])   continue ;
        vis[j] =  true ;
        dfs(j) ;
         if(flag)     return ;
        count -- ;
        vis[j] =  false ;
    }
}
int main(){
     int t, i, a, b ;
    scanf( " %d ", &t) ;
     while(t--){
        scanf( " %d ", &n) ;
        memset(data,  0sizeof(data)) ;
        memset(vis,  falsesizeof(vis)) ;
         for(i= 0; i<n*(n- 1)/ 2; i++){
            scanf( " %d%d ", &a, &b) ;
            data[a][b] =  1 ;
        }
        flag =  0 ;
         for(i= 1; i<=n; i++){
            vis[i] =  true ;
            count =  0 ;
            dfs(i) ;
             if(flag)     break ;
            vis[i] =  false ;
        }
         if(flag){
             for(i= 1; i<n; i++)
                printf( " %d  ", ans[i]) ;
            printf( " %d\n ", ans[i]) ;
        }
         else    printf( " Impossible\n ") ;
    }
     return  0 ;} 

你可能感兴趣的:(count)