您的位置:首页 > Web前端 > JavaScript

Dijskra(有误)

2015-05-03 09:51 162 查看
#include<vector>
#include<iostream>
using namespace std;

//邻接链表中的元素
struct E
{
int next;
int Weight;
};

vector<E> edge[101];
bool mark[101]; //标记
int Dis[101]; //距离

int main()
{
int n, m;
while (cin >> n >> m && n > 0 && m > 0)
{
//初始化邻接链表
for (int i = 1; i <= n; i++)
edge[i].clear();

//读数据
while (m--)
{
int a, b, c;
cin >> a >> b >> c;

E tmp;
tmp.Weight = c;
tmp.next = b;
edge[a].push_back(tmp);
tmp.next = a;
edge[b].push_back(tmp);
}

//初始化
for (int i = 1; i <= n; i++)
{
Dis[i] = -1;
mark[i] = false;
}

Dis[1] = 0;
mark[1] = true;
int Newp = 1;

//Dijskra
for (int i = 1; i < n; i++) //遍历剩下的点
{
//更新集合K相邻节点距离
for (size_t j = 0; j < edge[Newp].size(); j++)
{
int t = edge[Newp][j].next;
int c = edge[Newp][j].Weight;

if (mark[t] = true)
continue;
if (Dis[t] == -1 || Dis[t]>Dis[Newp] + c)
Dis[t] = Dis[Newp] + c;
}

int min = 123123123;

//找到新加入的节点
for (int j = 1; j <= n; j++)
{
if (mark[j] == true)
continue;
if (Dis[j] == -1)
continue;

if (Dis[j] < min)
{
min = Dis[j];
Newp = j;
}
}
mark[Newp] = true;
}

cout << Dis
<< endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  迪杰斯特拉算法