c语言数据结构 最短路径问题代码
C语言最短路径问题
C语言高手!!帮忙写个最短路径程序!!!! 这是我们的一个实验,你可以参考一下一、需求分析【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。【基本要求】(1)设计你所有学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。【测试数据】由读者根据实际情况指定。二、概要设计本次实验中运用到的数据类型有:图,顶点,边结点typedef struct edgenode{int adjvex;临接点序号int length;道路长度char name[20];景点名称char info[100];景点详细信息struct edgenode*next;}edgenode,*Node;typedef struct{char data[20];存储景点的名称.char str[100];具体的介绍此景点struct edgenode*link;指向下一个景点}vexnode;景点及其信息.typedef struct Edge{int lengh;边的权值,表示路径长度.int ivex,jvex;边的两端顶点号struct Edge*next;指向下一条边} EdgeType;边及其信息.typedef struct{int num;顶点编号char data[20];。
怎么用c语言实现单源最短路径问题?要求是用Dijkstra算法,最好写出所有的代码 ,包括结构定义等等,对一 C语言代码:/清华大学出版社光盘的代码void ShortestPath_DIJ(MGraph G,int v0,PathMatrix&P,ShortPathTable&D){/算法7.15用Dijkstra算法求有向网G的v0顶点到其余顶点v的最短路径P[v]及其带权长度D[v]。若P[v][w]为TRUE,则w是从v0到v当前求得最短路径上的顶点。final[v]为TRUE当且仅当v∈S,即已经求得从v0到v的最短路径。int i=0,j,v,w,min;bool final[MAX_VERTEX_NUM];for(v=0;v;v){final[v]=FALSE;D[v]=G.arcs[v0][v].adj;for(w=0;w;w)P[v][w]=FALSE;设空路径if(D[v]){ P[v][v0]=TRUE;P[v][v]=TRUE;}}D[v0]=0;final[v0]=TRUE;初始化,v0顶点属于S集开始主循环,每次求得v0到某个v顶点的最短路径,并加v到S集-for(i=1;i;i){/其余G.vexnum-1个顶点min=INFINITY;当前所知离v0顶点的最近距离for(w=0;w;w)if。final[w])/w顶点在V-S中if(D[w]){ v=w;min=D[w];}/w顶点离v0顶点更近final[v]=TRUE;离v0顶点最近的v加入S集for(w=0;w;w)/更新当前最短路径及距离if。final[w]&(min+G.arcs[v][w].adj[w])){修改D[w]和P[w],w∈V-SD[w]=min+G.arcs[v][w].adj;for(j=0;j;j+)P[w][j]=P[v][j];第v行赋值于第w行P[w][w]=TRUE;P[w]=P[v]+[w]}/if}/for}/。
C语言实现最短路径 方法/步骤 1 首先打开VC+6.0 2 选择文件,新建 3 选择C++ source file 新建一个空白文档 4 声明头文件和定义常量 include include define MAX_VEX_NUM 6 。
c语言最短路径问题。 #includedefine N 7/*顶点数目*/define I 999/*表示无穷大*/int graph[N][N]={/*图的邻接矩阵*/{I,4,5,8,I,I,I},{I,I,I,6,6,I,I},{I,I,I,5,I,7,I},{I,I,I,I,8,9,9},{I,I,I,I,I,I,5},{I,I,I,I,I,I,4},{I,I,I,I,I,I,I}};int List[N];存放拓扑序列*/int TopologicalOrder();拓扑排序函数*/void main()/*主 函 数*/{int i,j,k,l;int ee[N],el[N];最长最短距离*/int path_e[N][N],path_l[N][N],n_e[N],n_l[N];记录路径数据*/初始化数据*/for(i=0;i;i+){n_e[i]=0;到 i 的最短路线的结点数*/n_l[i]=0;到 i 的最长路线的结点数*/ee[i]=I;el[i]=0;}ee[0]=el[0]=0;初始化头结点*/path_e[0][0]=0;path_l[0][0]=0;n_e[0]=1;n_l[0]=1;拓扑排序*/if。TopologicalOrder())return;对于拓扑序列,运用动态规划步步算出最长路线与最短路线*/for(i=0;i;i+){提取拓扑序列的元素*/k=List[i];更新它所指向顶点的所有数据*/for(j=0;j;j+){寻找指向的顶点*/if(graph[k][j]。I){如果新路径更短*/if(graph[k][j]+ee[k][j]){更新最短路径长度*/ee[j]=graph[k][j]+ee[k];更新最短路线*/for(l=0;l[k];l+){path_e[j][l]=path_e[k][l];}path_e[j][l]=j;n_e[j]=l+1。
C语言最短路径问题 int main(){ int G[100][100]={};一个记录图的邻接矩阵 int a,b,w;输入一共有7条边,5个点 int i,j,k;for(i=1;i;i+)for(j=1;j;j+)G[i][j]=9999999;for(i=1;i;i+){ scanf(\"%d。