1. 题目
示例输入
4 4
1 2 3 4
1 2
1 3
1 4
2 3
2 3
示例输出
yes
2. 代码
#include <stdio.h>
#include <stdlib.h>
typedef struct edgeNode{
int endvex;
struct edgeNode *nextedge;
}EdgeNode;
typedef struct vexNode{
int vertex;
EdgeNode* edgeList;
}VexNode;
typedef struct graph{
int vexnum, edgenum;
VexNode vex[100];
}Graph;
Graph *G;
int visited[100], flag;
int locate(int v){
int num = G->vexnum, i;
for(i=0; i<num; i++){
if(G->vex[i].vertex == v){
return i;
}
}
}
void createGraph(){
G = (Graph*)malloc(sizeof(Graph));
int n, m;
scanf("%d%d", &n, &m);
G->vexnum = n; G->edgenum = m;
int i, j;
for(i=0; i<n; i++){
scanf("%d", &G->vex[i].vertex);
G->vex[i].edgeList = NULL;
}
int v1, v2, p, q;
for(j=0; j<m; j++){
scanf("%d%d", &v1, &v2);
p = locate(v1);
EdgeNode *e = (EdgeNode*)malloc(sizeof(EdgeNode));
// 头插法
e->endvex = v2;
e->nextedge = G->vex[p].edgeList;
G->vex[p].edgeList = e;
}
}
void dfs(int vs, int vt){
int v1 = locate(vs);
visited[vs] = 1;
EdgeNode *t = G->vex[v1].edgeList;
while(t){
if(!visited[t->endvex]){
if(t->endvex == vt){
flag = 1;
return;
}
dfs(t->endvex, vt);
}
t = t->nextedge;
}
}
int main(){
createGraph();
int vs, vt;
scanf("%d%d", &vs, &vt);
dfs(vs, vt);
if(flag) printf("yes\n");
else printf("no\n");
return 0;
}