#2不对
查看原帖
#2不对
1808312
dkr123楼主2025/7/25 17:03

我是找的最小环,但#2不对,求助

#include<bits/stdc++.h>
using namespace std;
int const MAXN=1e5+5;
int n,cnt,mp[MAXN],vis[MAXN],ans=0x3f3f3f3f;
int dfs(int x) {
	int cnt=0,d=x;
	bool flag[MAXN]={};
	while(!flag[d]) {
		flag[d]=1;
		d=mp[d];
		cnt++;
		if(vis[d]) {
			return -1;
		}
	}
	return cnt;
}
int main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		int v;
		cin>>v;
		mp[i]=v;
	}
	for(int i=1; i<=n; i++) {
		if(!vis[i]) {
			int p=dfs(i);
			if(p!=-1) {
				ans=min(p,ans);
			}
			vis[i]=1;
		}
	}
	cout<<ans;
	return 0;
}

2025/7/25 17:03
加载中...