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, 0, sizeof(data)) ;
memset(vis, false, sizeof(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 ;}
#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, 0, sizeof(data)) ;
memset(vis, false, sizeof(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 ;}