Dijkstra(迪杰斯特拉)算法
2015-07-14 20:07
183 查看
//解决带权有向图中两顶点间最短路径问题。
#include <stdio.h>
#define N 5
#define M (1<<20)
int main()
{
int i,j,s
= {0};
int dist[];
int array
={{0,2,4,M,M},
{M,0,1,1,M},
{M,M,0,M,2},
{M,M,1,0,3},
{M,M,M,M,0}
};
int startnode = 0,path,count = 0,min;
s[startnode] = 1;
for(i = 0;i < N;i++)
{
dist[i] = array[startnode][i];
}
count++;
while(count < N-1)
{
path = M;
for(i = 0;i < N;i++)
{
if((s[i]==0)&&(dist[i] < path))
path = dist[i];
min = i;
}
s[min] = 1;
for(i = 0;i < N;i++)
{
if((s[i]==0)&&(dist[min] + array[min][i]< dist[i]))
{
dist[i] = dist[min] + array[min][i];
}
}
count++;
}
for(i = 0;i < N;i++)
{
printf("V%d ->V%d : %d\n",startnode,i,dist[i]);
}
return 0;
}
#include <stdio.h>
#define N 5
#define M (1<<20)
int main()
{
int i,j,s
= {0};
int dist[];
int array
={{0,2,4,M,M},
{M,0,1,1,M},
{M,M,0,M,2},
{M,M,1,0,3},
{M,M,M,M,0}
};
int startnode = 0,path,count = 0,min;
s[startnode] = 1;
for(i = 0;i < N;i++)
{
dist[i] = array[startnode][i];
}
count++;
while(count < N-1)
{
path = M;
for(i = 0;i < N;i++)
{
if((s[i]==0)&&(dist[i] < path))
path = dist[i];
min = i;
}
s[min] = 1;
for(i = 0;i < N;i++)
{
if((s[i]==0)&&(dist[min] + array[min][i]< dist[i]))
{
dist[i] = dist[min] + array[min][i];
}
}
count++;
}
for(i = 0;i < N;i++)
{
printf("V%d ->V%d : %d\n",startnode,i,dist[i]);
}
return 0;
}
相关文章推荐
- 暑假选拔赛01 ---- 数字问题
- 浅析CSRF攻击
- grub4dos和winsetupfromusb1.4
- 属性 及 KVC 的使用
- IOStream的用法总结
- iOS中tabBar的基础介绍和用法
- TOJ 3853 Farmer Flabby
- LeetCode 1: Two Sum
- Android清单文件详解(二) ---- 应用程序权限声明
- JS-003-innerText 与 innerHTML 区别
- java存取BLOB类型的数据
- Android中shape中的属性大全
- UITableView简单性能优化
- 3.osg中的CallBack回调、NodeVisitor与鼠标键盘的交互
- AAC LATM - 14496-3部分摘要
- 第十章:对象和类
- Qt画银白色Macbook
- 简单工厂
- 2.osg内置几何类型、osg::Geometry的类型与osg::MatrixTransform
- Swift2学习:Swift概览2-控制流