PAT A 1003(写错了,dijkstra就错了,然而没找到错误)

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,mmp[501][501];
int dis[501],w[501],num[501],node[501],c1,c2;
bool book[501]={true};
const int inf=(1<<20)-1;
void Init()
{
    cin>>n>>m>>c1>>c2;
    for(int i=0;i<n;i++)
        cin>>node[i];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        if(i==j) mmp[i][j]=0;
        else mmp[i][j]=inf;
    }

    int a,b,c;
    for(int i=0;i<m;i++)
    {
        cin>>a>>b>>c;
        mmp[a][b]=mmp[b][a]=c;//无向图,所以边要存双向。
    }
    for(int i=0;i<n;i++)
        dis[i]=mmp[c1][i];
    book[c1]=false;
    w[c1]+=node[c1];
    num[c1]=1;
}
void Print()
{
    cout<<endl;
    for(int i=0;i<n;i++) cout<<w[i];
    cout<<endl;
    for(int i=0;i<n;i++) cout<<num[i];
    cout<<endl;
    for(int i=0;i<n;i++) cout<<node[i];
    cout<<endl;
    for(int i=0;i<n;i++) cout<<dis[i]<<" ";
}
void Dijkstra()
{
    int MIN,u;
    for(int i=1;i<=n-1;i++)
    {
        MIN=inf;
        u=-1;
        for(int j=0;j<n;j++)
        {
            if(book[j]&&dis[j]<MIN)
            {
                u=j;
                MIN=dis[j];
            }
        }
        book[u]=false;
        if(u==-1) return;//说明剩下的顶点与起点不连通
        for(int k=0;k<n;k++)
            //if(book[k]) 这里应该写直接相邻的边
            if(mmp[u][k]!=inf)
            {
                if(dis[k]>dis[u]+mmp[u][k])
                {
                    dis[k]=dis[u]+mmp[u][k];
                    w[k]=w[u]+node[k];
                    num[k]=num[u];
                }
                else if(dis[k]==dis[u]+mmp[u][k])
                {
                    if(w[k]<w[u]+node[k]) w[k]=w[u]+node[k];
                    num[k]+=num[u];
                }
            }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Init();
    Dijkstra();
    //cout<<num[c2]<<" "<<w[c2];

    cout<<endl;
    Print();
    return 0;
}

dis数组打印之后,能够看到,源点到不了4号点。但画出来的话,明明是可以到的呀。 

发布了77 篇原创文章 · 获赞 11 · 访问量 4994

猜你喜欢

转载自blog.csdn.net/qq_43346054/article/details/103211719