#include<stdio.h>
//#include"graph.h"
#include<iostream>
using namespace std;
typedef int InfoType;
#define MAXV 100//最大頂點(diǎn)個(gè)數(shù);
//以下為定義鄰接矩陣類(lèi)型
typedef struct
{
int no;//頂點(diǎn)編號(hào);
InfoType info;//頂點(diǎn)其他信息,這里用于存放邊的權(quán)值;
}VertexType;//頂點(diǎn)類(lèi)型;以后在這里改類(lèi)型;
typedef struct
{
int edges[MAXV][MAXV];//鄰接矩陣
int n,e; //頂點(diǎn)數(shù),弧數(shù)
VertexType vexs[MAXV]; //存放頂點(diǎn)信息
}MGraph; //圖的;鄰接矩陣類(lèi)型
//以下定義鄰接表的類(lèi)型
typedef struct ANode //弧的結(jié)點(diǎn)結(jié)構(gòu)類(lèi)型
{
int adjvex; //該弧的終點(diǎn)位置
struct ANode *nextarc;//指向下一條弧的指針
InfoType info; //該弧的相關(guān)信息,這里用于存放權(quán)值
}ArcNode; //
typedef int Vertex;
typedef struct Vnode //鄰接表頭結(jié)點(diǎn)的類(lèi)型
{
Vertex data; //頂點(diǎn)信息
ArcNode *firstarc; // 指向第一條弧
}VNode;
typedef VNode AdjList[MAXV]; //AdjList是鄰接表類(lèi)型
typedef struct
{
AdjList adjlist; //圖中頂點(diǎn)數(shù)n和邊數(shù)e
int n,e; //圖的鄰接表類(lèi)型
}ALGraph;
#define INF 10000
void dispath(int dist[],int path[],int s[],int n,int v0)
{
int i;
printf("path:");
for(i=0;i<n;i++)
printf(" %3d",path[i]);
printf("\n");
for(i=0;i<n;i++)
{
if(s[i]==1&&i!=v0)
{
printf("從%d到%d的最短距離長(zhǎng)度為:%d\t\n",v0,i,dist[i]);
}
else
printf("從%d到%d不存在路徑\n",v0,i);
}
}
void dijkstra(MGraph g,int v0)
{
int dist[MAXV],path[MAXV];
int s[MAXV];
int mindis,i,j,u,n=g.n;
for(i=0;i<n;i++)
{
dist[i]=g.edges[v0][i];
s[i]=0;
if(g.edges[v0][i]<INF)
path[i]=v0;
else
path[i]=-1;
}
s[v0]=1;path[v0]=0;
for(i=0;i<n;i++)
{
mindis=INF;
u=-1;
for(j=0;j<n;j++)
{
if(s[j]==0&&dist[j]<mindis)
{
u=j;
mindis=dist[j];
}
}
s[u]=1;
for(j=0;j<n;j++)
{
if(s[j]==0)
{
if(g.edges[u][j]<INF&&dist[u]+g.edges[u][j]<dist[j])
{
dist[j]=dist[u]+g.edges[u][j];
path[j]=u;
}
}
}
}
printf("最短路徑為:\n");
dispath(dist,path,s,n,v0);
}
int main()
{
int i,j,u=0;
MGraph g;
int A[MAXV][6]={
{INF,5,INF,7,INF,INF},
{INF,INF,4,INF,INF,INF},
{8,INF,INF,INF,INF,9},
{INF,INF,5,INF,INF,6},
{INF,INF,INF,5,INF,INF},
{3,INF,INF,INF,1,INF}};
g.n=6;
g.e=10;
for(i=0;i<g.n;i++)
for(j=0;j<g.n;j++)
g.edges[i][j]=A[i][j];
printf("\n");
dijkstra(g,u);
printf("\n");
return 0;
}
posted on 2013-05-15 19:15
天YU地___PS,代碼人生 閱讀(292)
評(píng)論(0) 編輯 收藏