救救孩子,第一次写Dijkstra
查看原帖
救救孩子,第一次写Dijkstra
52636
_PDF_楼主2021/4/30 09:41
#include<iostream>
using namespace std;
int n,m,s,e[10001][10001];
int dis[10001],book[10001];
const int INF=0x3f3f3f;
int main()
{
 	cin>>n>>m>>s;
 	for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j)e[i][j]=0;
            else e[i][j]=INF;
        }
    }
 	for(int i=1;i<=m;i++)
 	{
 		int t1,t2,t3;
 		cin>>t1>>t2>>t3;
		e[t1][t2]=t3; 
 	}
 	for(int i=1;i<=n;i++)
    {
        dis[i]=e[s][i];
    }
    for(int i=1;i<=n;i++) book[i]=0;
    book[s]=1;
    for(int i=1;i<=n-1;i++)
    {
    	int min_n=INF;
    	int min_i=0;
    	for(int k=1;k<=n;k++)
    	{
    		if(min_n>dis[k]&&book[k]==0)
			{
				min_n=dis[k];
				min_i=k;
			} 
		}
		book[min_i]=1;
		for(int j=1;j<=n;j++)
		{
			if(e[min_i][j]<INF)
			{
				if(dis[j]>dis[min_i]+e[min_i][j])
				{
					dis[j]=dis[min_i]+e[min_i][j];
				}
			}
		}
	}
	for(int i=1;i<=n;i++) cout<<dis[i]<<" "; 
}

为什么我一个点都没过,还mle了,但是样例过了aaaa

2021/4/30 09:41
加载中...