太久没写的话,手就会很生。先是dfs。
#include <iostream>
#include <stdio.h>
#include <map>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
#define maxn 111
vector<int> v[100];
int book[100];
void dfs(int i, int level)
{
book[level]++;
for(int k=0;k<v[i].size();k++)
dfs(v[i][k],level+1);
}
int main()
{
int n,m,k,j,tmp,i;
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%d %d",&i,&k);
for(j=0;j<k;j++)
{
scanf("%d",&tmp);
v[i].push_back(tmp);
}
}
dfs(1,1);
tmp=0;
for(i=0;i<n;i++)
if(book[i]>tmp)
{
tmp = book[i];
j = i;
}
printf("%d %d\n",tmp,j);
return 0;
}
然后再写个bfs练练手。
#include <iostream>
#include <stdio.h>
#include <map>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define maxn 111
vector<int> v[100];
int book[100];
int level[100];
int main()
{
int n,m,i,j,k,tmp;
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%d %d",&i,&k);
for(j=0;j<k;j++)
{
scanf("%d",&tmp);
v[i].push_back(tmp);
}
}
level[1]=1;
queue<int> q;
q.push(1);
while(!q.empty())
{
tmp=q.front();
q.pop();
book[level[tmp]]++;
for(i=0;i<v[tmp].size();i++)
{
q.push(v[tmp][i]);
level[v[tmp][i]]=level[tmp]+1;
}
}
int maxnum = 0, maxlevel = 1;
for(i = 1; i < 100; i++) {
if(book[i] > maxnum) {
maxnum = book[i];
maxlevel = i;
}
}
printf("%d %d", maxnum, maxlevel);
return 0;
}