POJ2263:Heavy Cargo

http://poj.org/problem?id=2263

题目是求一条能承载最重货物量的路径,只需求出最大的承载量。这题可以利用Floyd思想来解决,从i到j的路径中假设经过k,则该条路最少的承载量为min{ map[i][k] , map[k][j]},故对应的i到j的最大承载量为max{ map[i][j] , min{map[i][k] , map[k][i]}}。这样问题就可以解决了。

源代码如下:

#include<iostream>
#include<string.h>
#include<stdio.h>

using namespace std ;

char city[205][35] ;
int  map[205][205] ;

int m ;
int n ;
int csize ;

void floyd() ;

int main()
{
	int i ;
	int j ;
	int p ;
	int k ;
	int q ;
	int s ;
	q = 1 ; 
	char str1[35] ;
	char str2[35] ;
		
	while(scanf("%d %d" , &m , &n)!=EOF && n&&m)
	{
		memset(city , 0 ,sizeof(city)) ;
		memset(map , 0 , sizeof(map)) ;
		csize = 0 ;
		
		for(i = 0 ;  i < n ; i ++)
		{
			scanf("%s %s %d" , str1 , str2 , &p) ;
		
			k = -1 ; 
			s = -1 ;
			for(j = 0 ; j < csize ; j ++)
			{
				if(!strcmp(city[j] , str1))
				{
					k = j ;
				}
				if(!strcmp(city[j] , str2))
				{
					s = j ;
				}
			}
		
			if(k==-1)
			{
				strcpy(city[csize] , str1) ;
				k = csize ;
				csize ++ ;
			}
			if(s==-1)
			{
				strcpy(city[csize] , str2) ;
				s = csize ;
				csize ++ ;
			}
		
			map[k][s] = map[s][k] = p ;
		} 
		
		scanf("%s %s" , str1 , str2) ;
		
		k = -1 ; 
		s = -1 ;
		for(j = 0 ; j < csize ; j ++)
		{
			if(!strcmp(city[j] , str1))
			{
				k = j ;
			}
			if(!strcmp(city[j] , str2))
			{
				s = j ;
			}
		}
		
		floyd() ;
	
		printf("Scenario #%d\n%d tons\n\n" , q ++ , map[k][s] ) ;
	}
	return 0 ;
}

void floyd()
{
	int i ;
	int j ;
	int k ;
	
	int temp ;
	
	for(k = 0 ; k < m ; k ++)
	{
		for(i = 0 ; i < m ; i ++)
		{
			for(j = 0 ; j < m ; j ++)
			{
				temp = map[i][k] > map[k][j] ? map[k][j] : map[i][k] ;
				map[i][j] = temp > map[i][j] ? temp : map[i][j] ;			
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值