1 条题解

  • 0
    @ 2025-4-17 16:17:04

    本文深入探讨了Floyd算法的实现细节,通过一个具体的程序示例,展示了如何使用Floyd算法解决路径寻找问题,包括节点间的最短路径计算及中间关键节点的确定。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
     
    int g[110][110];
    int hinge[110][110];
    int vis[110];
    int main()
    {
    	while(1)
    	{
    		int n;
    		cin>>n;
    		if(n==0)
    		{
    			break;
    		}
    		memset(hinge,0,sizeof(hinge));
    		memset(vis,0,sizeof(vis));
    		for(int i=1;i<=n;i++)
    		{
    			for(int j=1;j<=n;j++)
    			{
    				char c;
    				cin>>c;
    				g[i][j]=c-'0';
    			}
    		}
    		for(int k=1;k<=n;k++)
    		{
    			for(int i=1;i<=n;i++)
    			{
    				for(int j=1;j<=n;j++)
    				{
    					if(g[i][k]!=0 &&g[k][j]!=0)
    					{
    						if(g[i][j]==0||g[i][j]>(g[i][k]+g[k][j]))
    						{
    							hinge[i][j]=k;
    							g[i][j]=g[i][k]+g[k][j];
    						}else if(g[i][j]==(g[i][k]+g[k][j]))
    						{
    							hinge[i][j]=0;
    						}
    					}
    				}
    			}
    		}
    		int js=0;
    		for(int i=1;i<=n;i++)
    		{
    			for(int j=i+1;j<=n;j++)
    			{
    				if(vis[hinge[i][j]]==0&& hinge[i][j]!=0)
    				{
    					vis[hinge[i][j]]=1;
    					js++;
    				}
    			}
    		}
    		cout<<js<<endl;
    	}
    	return 0;
    }
    • 1

    信息

    ID
    389
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者