1. 题目
示例输入
4 4
1 2 3 4
1 2
1 3
1 4
2 3
2 3
示例输出
yes
2. 代码
#include <iostream>
#include <queue>
using namespace std;
typedef struct node{
int data;
struct node* next;
}EdgeNode;
typedef struct{
int data;
EdgeNode *head;
}VexList;
typedef struct{
int edgenum, vexnum;
VexList vex[100];
}Graph;
Graph *G;
bool visited[100];
queue<int> q;
void CreateGraph(){
int n, m;
cin >> n >> m;
G = (Graph*)malloc(sizeof(Graph));
G->edgenum = m; G->vexnum = n;
for(int i=1; i<=n; i++){
cin >> G->vex[i].data;
G->vex[i].head = NULL;
}
int v1, v2;
for(int i=1; i<=m; i++){
cin >> v1 >> v2;
EdgeNode *e = (EdgeNode*)malloc(sizeof(EdgeNode));
e->data = v2;
e->next = G->vex[v1].head;
G->vex[v1].head = e;
}
}
bool bfs(int v1, int v2){
while(!q.empty()){
int tmp = q.front();
q.pop();
if(tmp == v2){
return true;
}
EdgeNode *e = G->vex[tmp].head;
while(e){
q.push(e->data);
e = e->next;
}
}
return false;
}
int main(){
CreateGraph();
int vs, vt;
cin >> vs >> vt;
q.push(vs);
visited[vs] = true;
if(bfs(vs, vt)) cout << "yes" << endl;
else cout << "no" << endl;
return 0;
}