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 ;} 
原文地址:https://www.cnblogs.com/xiaolongchase/p/2429964.html