當前位置:編程學習大全網 - 編程語言 - c語言編寫路線

c語言編寫路線

#include <stdio.h>

#include <malloc.h>

#include<stdlib.h>

#define MAX 100

#define MAXNUM 10000000

int previous[MAX-1];// 求路徑需要

int pp[MAX-1];// 記錄最短路徑

typedef struct graphnode

{

int vexnum; //頂點

int arcnum; //弧

int gra[MAX][MAX]; //鄰接矩陣表示0或1

}Graph;

int dist[MAX]; // 最短距離

int arc[MAX][MAX]; // 權

int main()

{

void Dijkstra(Graph *g,int v);

int i,j,n,m;

int v; //源點

Graph *G;

G=(Graph *)malloc(sizeof(Graph));

printf("vexnum:\n");

scanf("%d",&G->vexnum);

printf("arcnum:\n");

scanf("%d",&G->arcnum);

printf("graph:\n");

for(i=0;i<G->vexnum;i++)

for(j=0;j<G->vexnum;j++)

{

scanf("%d",&G->gra[i][j]);

}

for(i=0;i<G->vexnum;i++)

for(j=0;j<G->vexnum;j++)

{

if(G->gra[i][j]==1)

{

printf("請輸入%d到%d的權值:",i,j);

scanf("%d",&arc[i][j]);//若有弧 則輸入i到j直接的權

}

else

arc[i][j]=MAXNUM;

}

printf("請輸入源點v的值:");

scanf("%d",&v);

Dijkstra(G,v);

printf("請輸入源點所要到達的點:\n");

scanf("%d",&n);

pp[0]=0;

i=1;

m=n;// 記錄n的值

while(n!=0)// 求0到其他點路徑

{

pp[i]=previous[n];

i++;

n=previous[n];

}

printf("Path:0 -> ");

for(j=G->vexnum-1;j>=0;j--)

if(pp[j]!=0)

printf(" %d -> ",pp[j]);

printf("%d\n",m);

return 0;

}

void Dijkstra(Graph *G,int v)

{

int previous[MAX-1];

int newdist;

bool sign[MAX];

if(v<0||v>MAX-1)

{

printf("該源點不存在!\n");

return;

}

for(int i=0;i<G->vexnum;i++) //初始化

{

dist[i]=arc[v][i];

sign[i]=false;

if(dist[i]==MAXNUM)

previous[i]=0;

else

previous[i]=v;

}

dist[v]=0;

sign[v]=true;

for(i=0;i<G->vexnum;i++) // i<n-1 待定

{

float temp=MAXNUM;

int u=v; //u 中間變量

for(int j=0;j<G->vexnum;j++)

if((!sign[j])&&(dist[j]<temp))

{

u=j;

temp=dist[j];

}

sign[u]=true;

for(j=0;j<G->vexnum;j++)

if((!sign[j])&&(arc[u][j]<MAXNUM))

{

newdist=dist[u]+arc[u][j];

if(newdist<dist[j])

{

dist[j]=newdist;

previous[j]=u;

}

}

}

for(i=0;i<G->vexnum;i++)

if(dist[i]!=MAXNUM)

printf("從%d到%d的最短路徑是 %d\n",v,i,dist[i]);

else

printf("從%d到%d無最短路徑\n",v,i);

printf("\n");

}

這是Dijkstra算法求單源最短路徑算法 上程序中 假定頂點從0開始,搜索整個圖,然後求出0到其他各點的最短距離,存放在dist數組中,main函數後面幾行是求0到其他各點的路徑 基本上能滿足妳的要求了

  • 上一篇:廣州市奧威亞電子科技有限公司怎麽樣?
  • 下一篇:如何判斷壹項市場調研是有效的
  • copyright 2024編程學習大全網