Dijskra(有误)

来源:互联网 发布:神武2白无忧优化 编辑:程序博客网 时间:2024/05/01 13:40
#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[n] << endl;    }    return 0;}
0 0