Dijkstra算法——最短路径问题(C语言实现)_阿涵_新浪博客

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

?[订阅]
RSS
博客首页 登录 注册 记录下你的微生活
发博文
博文 搜索
阿涵
/jiangafu [订阅 ] [ 手机订阅 ]
首页 博文目录 图片 关于我
个人资料
阿涵
播客 微博
加好友 发纸条
写留言 加关注
博客等级:
博客积分: 627
博客访问: 9,626
关注人气: 7
相关博文
博客生活的最佳伴侣
新浪官博
更多>>
推荐博文
水木清华之图书馆篇:读书之乐
微软亚洲研究院
IDC市场进入自由定价时代
康斯坦丁
2011仍是App?Store开发者的好年
康斯坦丁
自由定价模式对网站建设市场的
于斌
开放透明是华为2010年报最大亮
刘启诚
与客户共同创新(一)
惠普中国研究院
有一种生活叫“Smarter?life”
杨宇良
南周妖魔化百度:是报道,还是
陈佼
网络低俗广告的鉴定标准
阿祥
告诉大家一个更加透明的华为
海天一峰
查看更多 >>
谁看过这篇博文
加载中…
正文 字体大小: 大 中 小
Dijkstra算法——最短路径问题(C语言实现) (2010-12-26 15:21:05) 转载
标签: dijkstra算法 最短路径问题 c语言实现 it 分类: c.java.python
#define MAX_VERTEX_NUM 100 //最大顶点数
#define MAX_INT 10000 //无穷大
typedef int AdjType;
typedef struct{
int pi[MAX_VERTEX_NUM];//存放v到vi的一条最短路径
int end;
}PathType;
typedef char VType; //设顶点为字符类型
typedef struct{
VType V[MAX_VERTEX_NUM]; //顶点存储空间
AdjType A[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵
}MGraph;//邻接矩阵表示的图
//Dijkstra算法
//求G(用邻接矩阵表示)中源点v到其他各顶点最短路径,n为G中顶点数
void Dijkstra(MGraph * G,PathTypepath[],int dist[],int v,int n){
int i,j,count,s[n],max,u;//s[n]用来标志源点到某顶点的最短路径是否求出
for(i=0;i<n;i++){//初始化
s[i]=0;
dist[i]=G->A[v][i];//v到其他顶点的权为当前最短路径,送dist[i]
path[i].pi[0]=v;path[i].end=0;
}
dist[v]=0;
s[v]=1;//源点到源点本身的最短路径求出
count=1;
while(count<=n-1){//求n-1条最短路径
max=MAX_INT;// MAX_INT为无穷大值,需要实际情况设置
for(j=0;j<n;j++){//找当前最短路径长度
if(s[j]==0&&dist[j]<max){
u=j;
max=dist[j];
}
}
if(max==MAX_INT)break;//最短路径求完(不足n-1)条,跳出while循环
s[u]=1;//表示V到Vu最短路径求出
path[u].end++;
path[u].pi[path[u].end]=u;
for(j=0;j<n;j++){//u求出后,修改dist和path向量
if(s[j]==0&&dist[j]>dist[u]+G->A[u][j]){
dist[j]=dist[u]+G->A[u][j];
path[j]=path[u];
}
}
count++;
}
}
int main(){
int i,j,v=0,n=6;//v为起点,n为顶点个数
MGraph G;
PathType path[n];//v到各顶点的最短路径向量
int dist[n];//v到各顶点最短路径长度向量
AdjType a[MAX_VERTEX_NUM][

MAX_VERTEX_NUM]={
{MAX_INT,12,18,MAX_INT,17,MAX_INT},
{12,MAX_INT,10,3,MAX_INT,5},
{18,10,MAX_INT,MA
X_INT,21,11},
{MAX_INT,3,MAX_INT,MAX_INT,MAX_INT,8},
{17,MAX_INT,21,MAX_INT,MAX_INT,16},
{MAX_INT,5,11,8,16,MAX_INT}
};
for(i=0;i<n;i++){
for(j=0;j<n;j++){
G.A[i][j]=a[i][j];
}
}
Dijkstra(&G,path,dist,v,n);
for(i=0;i<n;i++){
printf("%d到%d的最短路径:",v,i);
for(j=0;j<=path[i].end;j++){
printf("%d ",path[i].pi[j]);
}
printf("\n");
printf("最短路径长度:%d",dist[i]);//输出为MAX_INT则表示两点间无路径
printf("\n");
}
system("pause");
return 0;
}


相关文档
最新文档