求助dalao Dijkstra91分 不知道哪有问题
查看原帖
求助dalao Dijkstra91分 不知道哪有问题
470150
xml1515477286楼主2021/11/26 23:03
#include<iostream>
using namespace std;
int adj[2001][2001];
int d[2001];
int num[2001]={0};
bool vis[2001];
const int inf=100000001;
int n,m;
        void dij()
        {	int i;
			for(i=1;i<=n;i++)
			{
				d[i]=inf;
			}
            d[1]=0;
			num[1]=1;
            for(i=1;i<=n;i++)
            {
                int u=-1;
				int min=inf;
                for(int j=1;j<=n;j++)
                {
                    if(vis[j]==false&&d[j]<min)
                    {
                        u=j;
                        min=d[j];
                    }
                }
				if(u==-1) break;
            vis[u]=true;
            for(int v=1;v<=n;v++)
            {
                if(vis[v]==false)
                {
                    if(adj[u][v]+d[u]<d[v])
                    {
                        d[v]=adj[u][v]+d[u];
                        num[v]=num[u];
                    }
                    else if(adj[u][v]+d[u]==d[v])
                    {
                        num[v]+=num[u];
                    }
                }
            }
		}
        }
        int main()
        {
            int i;
			fill(adj[0],adj[0]+2001*2001,inf);
            cin>>n>>m;
            int x,y,l;
			for(i=1;i<=n;i++)
			{
				vis[i]=false;
			}
            for(i=1;i<=m;i++)
            {
				cin>>x>>y>>l;
				adj[x][y]=l;
            }
            dij();
			if(d[n]!=inf)
            cout<<d[n]<<" "<<num[n];
			else
			cout<<"No answer";
            return 0;
        }
2021/11/26 23:03
加载中...