数据结构试验7.5 图

#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;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值