Dijkstra单元最短路径算法
来源:互联网 发布:泊众棋牌游戏源码 编辑:程序博客网 时间:2024/06/08 07:40
#include<iostream>
#include<stack>
using namespace std;
#define MAX 999999
#define M 100
#define N 100
typedef struct node
{
int matrix[M][N];
int n; //定点数
int v; //边数
}Graph;
void Dijkstra(Graph g,int *dist,int *path,int v0)//v0是源定点
{
int i,j;
int *visited=(int *)malloc(sizeof(int)*g.n);
path[v0]=v0;
dist[v0]=0;
for(i=0;i<g.n;i++)
{
if(g.matrix[v0][i]>0&&v0!=i)
{
dist[i]=g.matrix[v0][i];
path[i]=v0;
}
else
{
dist[i]=MAX;
path[i]=-1;
}
visited[i]=0;
}
visited[v0]=1;
for(i=0;i<g.n;i++)
{
int k=0;
int min=MAX;
for(j=0;j<g.n;j++)
{
if(min>dist[j]&&!visited[j])
{
min=dist[j];
k=j;
}
}
visited[k]=1;
//更新
for(j=0;j<g.n;j++)
{
if(dist[j]>dist[k]+g.matrix[k][j]&&g.matrix[k][j]>0&&!visited[j])
{
dist[j]=dist[k]+g.matrix[k][j];
path[j]=k;
}
}
}
}
void showPath(int *path,int v,int v0)
{
stack<int>s;
int u=v;
while(v!=v0)
{
s.push(v);
v=path[v];
}
s.push(v);
while(!s.empty())
{
cout<<s.top()<<' ';
s.pop();
}
}
int main()
{
int n,e,i,j;
int s,t,w;
int v0;
Graph g;
cin>>n>>e;
int *dist=(int *)malloc(sizeof(int)*n);
int *path=(int *)malloc(sizeof(int)*n);
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
g.matrix[M][N]=0;
}
}
g.n=n;
g.v=e;
for(i=0;i<e;i++)
{
cin>>s>>t>>w;
g.matrix[s][t]=w;
}
cin>>v0;
Dijkstra(g,dist,path,v0);
for(i=0;i<n;i++)
{
if(i!=v0)
{
showPath(path,i,v0);
cout<<dist[i]<<endl;
}
}
system("pause");
return 0;
}
#include<stack>
using namespace std;
#define MAX 999999
#define M 100
#define N 100
typedef struct node
{
int matrix[M][N];
int n; //定点数
int v; //边数
}Graph;
void Dijkstra(Graph g,int *dist,int *path,int v0)//v0是源定点
{
int i,j;
int *visited=(int *)malloc(sizeof(int)*g.n);
path[v0]=v0;
dist[v0]=0;
for(i=0;i<g.n;i++)
{
if(g.matrix[v0][i]>0&&v0!=i)
{
dist[i]=g.matrix[v0][i];
path[i]=v0;
}
else
{
dist[i]=MAX;
path[i]=-1;
}
visited[i]=0;
}
visited[v0]=1;
for(i=0;i<g.n;i++)
{
int k=0;
int min=MAX;
for(j=0;j<g.n;j++)
{
if(min>dist[j]&&!visited[j])
{
min=dist[j];
k=j;
}
}
visited[k]=1;
//更新
for(j=0;j<g.n;j++)
{
if(dist[j]>dist[k]+g.matrix[k][j]&&g.matrix[k][j]>0&&!visited[j])
{
dist[j]=dist[k]+g.matrix[k][j];
path[j]=k;
}
}
}
}
void showPath(int *path,int v,int v0)
{
stack<int>s;
int u=v;
while(v!=v0)
{
s.push(v);
v=path[v];
}
s.push(v);
while(!s.empty())
{
cout<<s.top()<<' ';
s.pop();
}
}
int main()
{
int n,e,i,j;
int s,t,w;
int v0;
Graph g;
cin>>n>>e;
int *dist=(int *)malloc(sizeof(int)*n);
int *path=(int *)malloc(sizeof(int)*n);
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
g.matrix[M][N]=0;
}
}
g.n=n;
g.v=e;
for(i=0;i<e;i++)
{
cin>>s>>t>>w;
g.matrix[s][t]=w;
}
cin>>v0;
Dijkstra(g,dist,path,v0);
for(i=0;i<n;i++)
{
if(i!=v0)
{
showPath(path,i,v0);
cout<<dist[i]<<endl;
}
}
system("pause");
return 0;
}
0 0
- Dijkstra单元最短路径算法
- 单元最短路径问题Dijkstra算法
- 单元最短路径——Dijkstra
- DIJKSTRA最短路径算法
- 最短路径算法-dijkstra
- dijkstra最短路径算法
- 最短路径 Dijkstra算法
- 最短路径(Dijkstra算法)
- 最短路径Dijkstra算法
- 最短路径 Dijkstra算法
- Dijkstra最短路径算法
- 最短路径dijkstra算法
- 最短路径 dijkstra算法
- 最短路径Dijkstra 算法
- 最短路径 (Dijkstra算法)
- Dijkstra最短路径算法
- 最短路径(Dijkstra算法)
- 最短路径--Dijkstra算法
- [Python]网络爬虫学习笔记,爬取东南大学SEU-wlan的流量使用情况
- 一个小疑惑
- 一个简单的python网络爬虫程序(下载博客文章)
- linux下Python各种关于路径问题的解决办法
- n皇后问题
- Dijkstra单元最短路径算法
- offer档次大观(IT)分享一下
- 用dnspod进行DNS解析出错的解决方案
- Visual C++下的一些程序调试和开发技巧
- JDBC连接MySQL数据库及示例
- AAuto,Javascript,PHP语法、常用函数对比
- 第四章字符串和多维数组精讲全面解读数据结构c++版
- java 编程思想 笔记
- hdu1978动态规划