1 solutions

  • 0
    @ 2024-12-10 23:09:25

    C :

    #include<stdio.h>
    
    const int inf=1000000000;
    int g[101][101],mini[101];
    
    void dijkstra(int n,int g[][101],int s,int* mini)
    {
            int v[101],i,j,k;
            for(i=1;i<=n;i++)
            {
                    mini[i]=inf;
                    v[i]=0;
            }
            for(mini[s]=0,j=1;j<=n;j++)
            {
                    for(k=-1,i=1;i<=n;i++)
                            if(!v[i]&&(k==-1||mini[i]<mini[k]))
                                    k=i;
                    for(v[k]=1,i=1;i<=n;i++)
                            if(!v[i]&&mini[k]+g[k][i]<mini[i])
                                    mini[i]=mini[k]+g[k][i];
            }
    }
    
    int main()
    {
            int n,m,a,b,c,i,j;
            while(scanf("%d%d",&n,&m)!=EOF,n||m)
            {
                    for(i=1;i<=n;i++)
                            for(j=1;j<=n;j++)
                                    g[i][j]=inf;
                    while(m--)
                    {
                            scanf("%d%d%d",&a,&b,&c);
                            if(g[a][b]>c)
                                    g[a][b]=g[b][a]=c;
                    }
                    dijkstra(n,g,1,mini);
                    printf("%d\n",mini[n]);
            }
            return 0;
    }
    

    C++ :

    #include<stdio.h>
    
    const int inf=1000000000;
    int g[101][101],mini[101];
    
    void dijkstra(int n,int g[][101],int s,int* mini)
    {
    	int v[101],i,j,k;
    	for(i=1;i<=n;i++)
    	{
    		mini[i]=inf;
    		v[i]=0;
    	}
    	for(mini[s]=0,j=1;j<=n;j++)
    	{
    		for(k=-1,i=1;i<=n;i++)
    			if(!v[i]&&(k==-1||mini[i]<mini[k]))
    				k=i;
    		for(v[k]=1,i=1;i<=n;i++)
    			if(!v[i]&&mini[k]+g[k][i]<mini[i])
    				mini[i]=mini[k]+g[k][i];
    	}
    }
    
    int main()
    {
    	int n,m,a,b,c,i,j;
    	while(scanf("%d%d",&n,&m)!=EOF,n||m)
    	{
    		for(i=1;i<=n;i++)
    			for(j=1;j<=n;j++)
    				g[i][j]=inf;
    		while(m--)
    		{
    			scanf("%d%d%d",&a,&b,&c);
    			if(g[a][b]>c)
    				g[a][b]=g[b][a]=c;
    		}
    		dijkstra(n,g,1,mini);
    		printf("%d\n",mini[n]);
    	}
    	return 0;
    }
    

    Java :

    
    import java.io.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {  
        	Scanner jin=new Scanner(System.in);
        	int N,M;
        	int dist[][]=new int[105][105];
        	while((N=jin.nextInt())!=0&&(M=jin.nextInt())!=0){
        		for(int i=1;i<=N;i++)
        			for(int j=1;j<=N;j++)
        				dist[i][j]=i==j?0:10005;
        		for(int i=0;i<M;i++){
        			int A=jin.nextInt(),B=jin.nextInt(),C=jin.nextInt();
        			dist[B][A]=dist[A][B]=Math.min(C,dist[A][B]);
        		}
        		for(int k=1;k<=N;k++)
        			for(int i=1;i<=N;i++)
        				for(int j=1;j<=N;j++)
        					dist[j][i]=dist[i][j]=Math.min(dist[i][j], dist[i][k]+dist[k][j]);
        		System.out.println(dist[1][N]);
        	}
        }
    }  
    
    • 1

    Information

    ID
    573
    Time
    1000ms
    Memory
    32MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By