前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >zoj1456[通俗易懂]

zoj1456[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-14 10:19:35
1240
发布2022-09-14 10:19:35
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

题目大意:

Spring国家有N个城市,每队城市之间也许有运输路线,也可能没有。现在有一些货物要从一个城市运到另一个城市。运输费有两部分组成: 城市之间的运输成本,路过一个城市的税,除了起点和终点城市。 你必须写一个程序找到最小成本的路线 输入: a11 a12 … a1N a21 a22 … a2N …………… aN1 aN2 … aNN b1 b2 … bN

c d e f … g h aij是从城市i到城市j的运输成本,aij=-1表明没有直达路线。bi表明路过城市i的税 货物从城市c运到城市d,城市e到城市f

解题思路:

Floyd算法

代码如下:

代码语言:javascript
复制
#include<stdio.h>
#include<iostream>
using namespace std;
#define N 110
#define MAX 9999999
int map[N][N][N];
int g[N][N];
int pre[N][N];
int n;
int cost[N];

void floyd()
{
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=n;j++)
    {
      if(g[i][j]==-1)
        map[0][i][j]=MAX;
      else
        map[0][i][j]=g[i][j];
    }
  }
  for(int k=1;k<=n;k++)
  {
    for(int i=1;i<=n;i++)
    {
      for(int j=1;j<=n;j++)
      {
        map[k][i][j]=map[k-1][i][j];
        if(map[k][i][j]>map[k-1][i][k]+map[k-1][k][j]+cost[k])
        {
          map[k][i][j]=map[k-1][i][k]+map[k-1][k][j]+cost[k];
          pre[i][j]=pre[i][k];
        }
        else  
        if(map[k][i][j]==map[k-1][i][k]+map[k-1][k][j]+cost[k])
        {
          if(pre[i][k]<pre[i][j])
          {
            pre[i][j]=pre[i][k];
          }
        }
      }
    }
  }
}

int main()
{
  while(scanf("%d",&n)!=EOF&&n)
  {
    for(int i=1;i<=n;i++)
    {
      for(int j=1;j<=n;j++)
      {
        scanf("%d",&g[i][j]);
        pre[i][j]=j;
      }
    }
    for(int i=1;i<=n;i++)
    {
      scanf("%d",&cost[i]);
    }
    int u,v,tmp;
    while(scanf("%d%d",&u,&v)&&u!=-1&&v!=-1)
    {
      floyd();
      tmp=u;

      printf("From %d to %d :\n",u,v);

      printf("Path: %d",u);

      while(tmp!=v)

      {

          printf("-->%d",pre[tmp][v]);

          tmp=pre[tmp][v];

      }

      printf("\n");

      printf("Total cost : %d\n",map[n][u][v]);

      printf("\n");

    }
  }
  return 0;
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159312.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目大意:
  • 解题思路:
  • 代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档