无向图指定起点和终点的简单路径,存储方式采用邻接矩阵:
int visited[10]={0};
typedef struct ma{
char vexs[10];
int arcs[10][10];
int vexnum,arcnum;
}netgraph;
//求指定两点的简单路径
void BF_tra(netgraph G,int v0,int v1,int path[],int *n,int found){
visited[v0]=1;
path[*n]=v0;(*n)++;
if(v0==v1){
for(int i=0;i<(*n);i++)
printf("%c ",G.vexs[path[i]]);
found=1;return;
}
for(int i=0;i<G.vexnum;i++){
if(G.arcs[v0][i]&&!visited[i]&&!found){
BF_tra(G,i,v1,path,n,found);
}
}
visited[v0]=0;
(*n)--;
}
检查图中有无环:
void DF_circle(netgraph G,int v0){
visited[v0]=1;int v1=0,d1=0;
for(int i=0;i<G.vexnum;i++){
if(G.arcs[v0][i]){
v1++;
if(visited[i])
d1++;
}
}
if(v1==d1&&d1!=1){
printf("有回路\n");return ;
}
for(int i=0;i<G.vexnum;i++){
if(visited[i]==0&&G.arcs[v0][i])
DF_circle(G,i);
}
}