为什么这样就会错??求解啊

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
int a[200001]={0};
int step[200001]={0};
bool vis[200001]={0};
int ans=23333333;
int dfs(int x,int tol,int num){
int doll=a[x];
if(vis[doll]!=0&&vis[doll]!=num) return 0;
if(!vis[doll]){
vis[doll]=num;
step[doll]=tol;
dfs(a[doll],tol+1,num);
}
else{
if(tol-step[doll]<ans){
ans=tol-step[doll];
return 0;
}
}
}
int main(){
// freopen("2015message.in","r",stdin);
// freopen("2015message.out","w",stdout);
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++){
if(vis[i]==0){
vis[i]=i;
dfs(i,1,i);
}
}
printf("%d",ans);
fclose(stdin);
fclose(stdout);
return 0;
}

1 条评论

  • @ 2016-11-13 17:41:58

    我知道了——在dfs中原本应该直接调用dfs(doll,tol+1,num),但被我写成了dfs(a[doll],tol+1,num)
    欸,就这样我被困了一下午~~~,真弱啊
    为什么总会这样~~~~~~~~~"'-'"

  • 1

信息

ID
1979
难度
6
分类
(无)
标签
递交数
4096
已通过
980
通过率
24%
被复制
9
上传者