#include<iostream>
using namespace std;
int N,a[100000],visited[100000]={0};
int cycle_length;
void dfs(int i)
{
if(visited[i])return;
visited[i]=1;
cycle_length++;
dfs(a[i]);
}
int main()
{
cin>>N;
for(int i=0;i<N;i++)cin>>a[i];
int total=0;
for(int i=0;i<N;i++){
if(!visited[i]){
if(i!=a[i]){
cycle_length=0;
dfs(i);
if(i==0)total+=cycle_length-1;
else total+=cycle_length+1;
}
}
}
cout<<total;
}
//对于环中有0,环长为l,步数l-1
//对于环中无0,环长为l,步数l+1
1067 Sort with Swap(0, i)
于 2023-03-09 23:54:00 首次发布
该C++程序使用深度优先搜索(dfs)来检测一个给定数组中的环,并计算环中的步数。当环中包含0时,步数为环长减1;若无0,则步数为环长加1。程序首先读取数组长度和元素,然后遍历数组,对每个未访问的元素执行dfs。

被折叠的 条评论
为什么被折叠?



