posts - 36,  comments - 3,  trackbacks - 0
#include<stdio.h>
//#include"graph.h"
#include<iostream>
using namespace std;
typedef int InfoType;
#define MAXV 100//最大顶点个数;
//以下为定义邻接矩阵类型
typedef struct 
{
int no;//顶点编号;
InfoType info;//顶点其他信息,这里用于存放边的权值;
}VertexType;//顶点类型;以后在这里改类型;
typedef struct 
{
int edges[MAXV][MAXV];//邻接矩阵
int n,e;              //顶点数,弧数
VertexType vexs[MAXV]; //存放顶点信息
}MGraph;                      //图的;邻接矩阵类型
//以下定义邻接表的类型
typedef struct ANode      //弧的结点结构类型
{
int adjvex;          //该弧的终点位置
struct ANode *nextarc;//指向下一条弧的指针
InfoType info;         //该弧的相关信息,这里用于存放权值
}ArcNode;                //
typedef int Vertex;
typedef struct Vnode      //邻接表头结点的类型
Vertex data;          //顶点信息
ArcNode *firstarc;  // 指向第一条弧
}VNode;                       
typedef VNode AdjList[MAXV]; //AdjList是邻接表类型
typedef struct
{
AdjList adjlist;         //图中顶点数n和边数e
int n,e;              //图的邻接表类型
}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的最短距离长度为:%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,代码人生 阅读(286) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2013年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

 一定要好好学习,天天向上!

常用链接

留言簿

随笔分类(8)

随笔档案(35)

文章分类

文章档案(1)

搜索

  •  

最新评论

阅读排行榜

评论排行榜