#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n],b[n];
for(int i=0;i<n;i++)
{
cin >> b[i];
a[i]=i;
}
int t=n+1,r,s;
for(int o=0;o<n;o++)
{
r=o;
t=n+1;
if(a[o]!=-1)
{
while(n>0)
{
if(a[o]==t)
{
a[o]=-1;
b[r]=-1;
break;
}
for(int i=0;i<n;i++)
{
if(b[r]==a[i])
{
b[r]=-1;
a[i]=-1;
t=b[i];
r=i;
}
}
}
s++;
}
}
cout << endl << s << endl;
}
#include
using namespace std;
int main()
{
int n;
cin >> n;
int a[n],b[n];
for(int i=0;i {
cin >> b[i];
a[i]=i;
}
int t=n+1,r,s;
for(int o=0;o {
r=o;
t=n+1;
if(a[o]!=-1)
{
while(n>0)
{
if(a[o]==t)
{
a[o]=-1;
b[r]=-1;
break;
}
for(int i=0;i {
if(b[r]==a[i])
{
b[r]=-1;
a[i]=-1;
t=b[i];
r=i;
}
}
}
s++;
}
}
cout << endl << s << endl;
}
#include <iostream>
using namespace std;
int main()
{
int n,u=0;
cin >> n;
int a[n],b[n];
for(int i=0;i<n;i++)
{
a[i]=i;
cin >> b[i];
}
int t=n+1,r,s;
for(int o=0;o<n;o++)
{
r=o;
t=n+1;
if(a[o]!=-1)
{
while(n>0)
{
if(a[o]==t)
{
a[o]=-1;
b[r]=-1;
break;
}
for(int i=0;i<n;i++)
{
if(b[r]==a[i])
{
b[r]=-1;
a[i]=-1;
t=b[i];
r=i;
}
}
}
s++;
}
}
cout << endl << s << endl;
return 0;
}
你的 t 和 n 好像是錯的,從頭到尾都沒有變。
這題是需要找出有幾個群體,最差的情況就是有n個群體,所以可以從先用一個 i ~ n 的迴圈
接下來開一個陣列紀錄被訪問過的值,以防下次再走到,當小群體被走完就換下一個,就可以找出群體個數了~
可以在多想一下,也附上AC程式碼 :