最短路径

来源:互联网 发布:消费积分软件 编辑:程序博客网 时间:2024/06/07 19:47
题: (1 2)(1 3)(1 4)(1 6)(2 6)(3 4)(3 5)(4 7)(5 7)(5 8)(6 8)(7 8)

从1出发,到8的最短路径 


#include<stdio.h>#include<stdlib.h>#define size 100 //矩阵大小 typedef struct Node {int city;int pre;Node *next;}Node;void jz(int m[size][size],int number)//构造邻接矩阵 {int a,b;printf("请输入道路,例如a b为a b之间有道路\n");printf("输入0 0结束输入\n")scanf("%d %d",&a,&b);while(!(a==0&&b==0))           //有向图,可控制是有向图还是无向图 {m[a][b]=1;    m[b][a]=1;scanf("%d %d",&a,&b);} }void No(Node &Dui)//创建队列 {Dui.next=(Node *)malloc(size * sizeof(Node));}int search(int qh,int qe,Node &sq,int visited[],int m[size][size],int n,int chu,int zhong)//chu为开始城市 //zhong为终点城市 {qh=chu-1; qe=chu;sq.next[chu].city=chu;sq.next[chu].pre=0;visited[chu]=1;//当队不空while(qh!=qe){//结点出队 qh=qh+1;//初始城市为1 //加入结点for(int i=1;i<=n;i++){if(m[sq.next[qh].city][i]==1&&visited[i]==0){// 结点入队qe=qe+1;sq.next[qe].city=i; sq.next[qe].pre=qh;visited[i]=1;}if(sq.next[qe].city==zhong)//是否找到城市8 {printf("路径为(倒序路径):\n");printf("%d",sq.next[qe].city);while(sq.next[qe].pre>0){qe=sq.next[qe].pre;printf("--%d",sq.next[qe].city);} return 0;} } } }int main(){int qh;//队首下标 int qe;//队尾下标 int m[size][size];printf("输入顶点数量\n");int number;scanf("%d",&number);printf("输入开始城市,和终点城市\n");int chu,zhong;scanf("%d %d",&chu,&zhong);jz(m,number);Node Dui;No(Dui);int visited[size];    search(qh,qe,Dui,visited,m,number,chu,zhong);//查找最短路径 return 0;}


0 0
原创粉丝点击