目录
题目一(小朋友崇拜圈):
代码:
#include<iostream>
using namespace std;
int a[100010];
int ans = 0, t;
int book[100010];
void dfs(int k,int sum)
{
if (book[k])//已经访问过,则有可能为环
{
if (k==t)//回到起始,则为环
if (sum > ans)
ans = sum;
return;
}
book[k] = 1;//标记已经访问
dfs(a[k], sum + 1);
book[k] = 0;//回溯
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
{
t = i;
dfs(i, 0);//从第i个人出发可以组成0个人的圈
}
cout << ans;
}
题目二(穿越雷区):
代码:
#include<iostream>
#include<queue>
using namespace std;
char s[110][110];
int book[110][110] = { 0 };
int ans = 0;
int dx[4] = { 1,0