迪杰斯特拉算法运行错误

Miqiuha 2018-01-12 03:12:24
#include <iostream>
#include<vector>
#include<string>
#include<fstream>
#include <cstdlib>//exit
using namespace std;

const int inf=999;
const int maximum=512;
int edge[30][30];

/**
1.分为两个集合
2.放到集合里,标记为1
3.再算出最短距离。
dist[]表示最短距离。
*/
void out(int n,int v,int* dist,int* pre)
{
cout<<v<<"至其他节点的最短路径为:"<<endl;
for(int i=0; i<n; i++)
{
if(i==v)continue;
vector<int> path;
cout<<i<<" "<<dist[i];
path.push_back(i);
int temp=i;
while(pre[temp]!=-1)
{
path.push_back(pre[temp]);
temp=pre[temp];
}
for(int k=path.size()-1; k>=0; k--) //通过数组size来管理。
{
cout<<"->"<<path[k];
}
}
}

void Dijsktra(int n,int v,int edge[30][30])
{
int via[n];//通过V

int dist[n];
int pre[n];
pre[v]=-1;

for(int i=0; i<n; i++)
{
dist[i]=edge[v][i];
via[i]=0;
if(edge[v][i]!=inf)
pre[i]=v;
else
pre[i]=0;
}
via[v]=1;
for(int j=1; j<n; j++)
{
int temp=inf;
int u;
for(int i=0; i<n; i++)
{
if(!via[i]&&dist[i]<temp)
{
temp=dist[i];
u=i;
}
}
via[u]=1;
for(int i=0; i<n; i++)
{
if(!via[i]&&dist[u]+edge[u][i]<dist[i])
{
dist[i]=dist[u]+edge[u][i];
pre[i]=u;//记下前驱结点
}
}
}//循环完之后就有了dist为值,path为路径
out(n,v,dist,pre);
}

int main()
{
ifstream in("test.txt");
if(!in.is_open())
{
cout<<"打开错误";
exit(1);
}
int n,m;//最大有多少个节点,节点编号从0开始,m表示有多少条边
in>>n>>m;
int x,y,cost;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(i!=j)
edge[i][j]=inf;
else
edge[i][j]=0;//对角线上为0.即到自己的距离。
}
}
for(int i=0; i<m; i++)
{
in>>x>>y>>cost;
edge[x][y]=cost;
edge[y][x]=cost;
}
Dijsktra(n,0,edge);
return 0;
}


test.txt里存的内容是:
4 5
0 1 1
0 2 3
0 3 2
1 3 1
2 3 1

求大家帮助,我真的太笨了。
...全文
568 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuckguidao 2018-01-13
  • 打赏
  • 举报
回复
你看一下这个 http://blog.csdn.net/fuckguidao/article/details/79053877
paschen 版主 2018-01-12
  • 打赏
  • 举报
回复
出错时中断下来,通过调用堆栈定位到相关位置,分析原因,必要时可设置断点并单步跟踪程序运行,观察程序流程和变量变化

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧