题面:
思路:dfs与bfs
1.有一个起点,找终点,其实也是联通块问题,直接bfs,dfs都行
2.第一次写dfs有点难,不过可以先学bfs
AC_Code:C++
#include<bits/stdc++.h>
using namespace std;
int const N=507;
int n,m;
vector<int>son[N]; //存图
bool vis[N]; //记录可以到达的点
bool bfs(){
queue<int>q; q.push(1);
while(q.size()){
int t=q.front(); q.pop();
for(int x:son[t]){
if(vis[x]) continue; //遍历过
vis[x]=1;
if(x==n) return true; //到了终点
q.push(x);
}
}
return false;
}
bool dfs(int x){
if(x==n) return true; //到了终点
vis[x]=1;
for(int y:son[x]){
if(vis[y]) continue; //遍历过
if(dfs(y)) return true; //找到答案直接返回
}
return false; //都没有找到
}
int main( )
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int a,b; scanf("%d%d",&a,&b);
son[a].push_back(b);
}
//dfs
if(dfs(1)) cout<<"Yes";
else cout<<"No";
//可以注释上面的代码,下面为简单易学的bfs
// if(bfs()) cout<<"Yes";
// else cout<<"No";
return 0;
}