题目
PAT 甲级 1094 The Largest Generation (25分) DFS BFS
思路
DFS
BFS
易错点
1 DFS中,book[level]++在递归退出条件之前,因为每次进入dfs都是一个结点,所以要统计 2 BFS中,最开始入队列的是1,因为题目已知1号结点为根结点,bfs要从根结点开始
题解
DFS
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std
;
const int maxn
= 110;
vector
<int> vs
[maxn
];
int book
[maxn
],maxl
;
void dfs(int v
,int level
){
book
[level
]++;
maxl
= max(maxl
,level
);
if(vs
[v
].size()==0)return;
for(int i
=0;i
<vs
[v
].size();i
++){
dfs(vs
[v
][i
],level
+1);
}
}
int main(int argc
,char * argv
[]){
int n
,m
,id
,k
,cid
;
scanf("%d%d",&n
,&m
);
for(int i
=0;i
<m
;i
++){
scanf("%d%d",&id
,&k
);
for(int j
=0;j
<k
;j
++){
scanf("%d",&cid
);
vs
[id
].push_back(cid
);
}
}
dfs(1,1);
int maxpi
=0;
for(int i
=1;i
<=maxl
;i
++){
if(book
[i
]>book
[maxpi
]){
maxpi
= i
;
}
}
printf("%d %d",book
[maxpi
],maxpi
);
return 0;
}
BFS
#include <iostream>
#include <vector>
#include <cstring>
#include <unordered_map>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std
;
const int maxn
= 110;
vector
<int> vs
[maxn
];
int book
[maxn
],maxpi
,maxp
,level
[maxn
];
void bfs(){
queue
<int> q
;
q
.push(1);
level
[1]=1;
while(!q
.empty()){
int now
= q
.front();
q
.pop();
book
[level
[now
]]++;
if(book
[level
[now
]]>maxp
){
maxp
= book
[level
[now
]];
maxpi
= level
[now
];
}
for(int i
=0;i
<vs
[now
].size();i
++){
level
[vs
[now
][i
]]=level
[now
]+1;
q
.push(vs
[now
][i
]);
}
}
}
int main(int argc
,char * argv
[]){
int n
,m
,id
,k
,cid
;
scanf("%d%d",&n
,&m
);
for(int i
=0;i
<m
;i
++){
scanf("%d%d",&id
,&k
);
for(int j
=0;j
<k
;j
++){
scanf("%d",&cid
);
vs
[id
].push_back(cid
);
}
}
bfs();
printf("%d %d",maxp
,maxpi
);
return 0;
}