#include <stdio.h>
#include "stdlib.h"
#define vertexnum 10
typedef struct node{
int vertex;
struct node *next;
}*graph;
struct node head[vertexnum];
int visited[vertexnum];
int path[50];
//以邻接表形式存储
void Creat_Graph(int vertex1,int vertex2){
graph pointer,new_p;
new_p = (graph)malloc(sizeof(struct node));
if(new_p != NULL){
pointer = &(head[vertex1]);
new_p->vertex = vertex2;
new_p->next = NULL;
while (pointer->next != NULL){
pointer=pointer->next;
}
pointer->next=new_p;
}
}
//打印邻接点
void Print_graph(struct node *head){
graph pointer;
pointer=head->next;
while(pointer != NULL){
printf("[%d]",pointer->vertex);
pointer=pointer->next;
}
printf("\n");
}
void FindPaths(int start,int end,int path[],int d){
int w,i;
graph p;
d++;
path[d]=start;
visited[start]=1;
if(start==end){
for(i=0;i<=d;i++)
printf("%3d",path[i]);
printf("\n");
}
p=head[start].next;
if(p){
w=p->next->vertex;
if(visited[w]==0)
FindPaths(w,end,path,d);
p=p->next;
}
visited[start]=0;
}
int main() {
int i,j,side,nodenum;
int start;
int endnode;
int node[100];//存一百组数据 也就是50条边
printf("please input the number of node:\n");
scanf("%d",&nodenum);
printf("please input the number of side:\n");
scanf("%d",&side);
for(i = 0,j=1;(i/2+1)<=side;i+=2,j+=2){
scanf("%d%d",&node[i],&node[j]);
Creat_Graph(node[i],node[j]);
}
for(i=1;i<=nodenum;i++){
head[i].vertex=i;
head[i].next=NULL;
}
for(i=1;i<=nodenum;i++)
visited[i]=0;
printf("graph\n");
for (i=1;i<=nodenum;i++){
printf("vertex[%d]: ",i);
Print_graph(&head[i]);
}
printf("\nPlease enter the start node:");
scanf("%d",&start);
printf("\nPlease enter the end node:");
scanf("%d",&endnode);
printf("从%d到%d的所有路径\n");
FindPaths(start,endnode,path,-1);
return 0;
}
数据结构试验7.5 图
最新推荐文章于 2022-04-18 15:29:11 发布