poj 2263

题目:求各城市每条给定起点和终点间通路的最小负载,并据此求出所有最小负载中的最大值,无需考虑路程问题。

方法:用的floyd算完了之后去网上查发现用dijstra做- -   

哭了- -

去补dijstra- -

恶心的是把字符串映射到int里、用的vector 


#include <fstream>
#include <iostream>
#include <cstdio>
#include <string.h>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn= 205;
int n,r,t;
char str1[35],str2[35];
int map[maxn][maxn];
struct  city
{
	int id;
	char name[35];
}; //许多城市
vector <city> v;
int search_name(char *p)  //恶心的找名字- -    把找名字和更新数组放一起了
{
	for(int i=0;i<v.size();i++)
	{
		if(strcmp(v[i].name,p)==0)
			return v[i].id;
	}
	city temp;
	temp.id=v.size();
	strcpy(temp.name,p);
	v.push_back(temp);
	return temp.id;
}
void floyd(int s,int e)  	//万能的floyd  但总感觉在这里用的不太对劲- -
{
	int num=v.size();
	for(int k=0;k<num;k++)
		for(int i=0;i<num;i++)
			for(int j=0;j<num;j++)
				{  
				    if(map[i][j]<map[i][k]&&map[i][j]<map[k][j])
						map[j][i]=map[i][j]=map[i][k]<map[k][j]?map[i][k]:map[k][j];
					//如果有大路径,则取大路径里的小的那个
				}
	printf("%d tons\n\n",map[s][e] );
}
int main()
{
    //freopen("input.txt","r",stdin);
    int kase=0;
	while(cin>>n>>r,n)
	{
	    kase++;
		memset(map,0,sizeof(map));  //要定义为0
		//for(int i=0;i<n;i++)
			//map[i][i]=0;

		v.clear();
		for(int i=0;i<r;i++){
			scanf("%s %s %d",str1,str2,&t);
			int id1=search_name(str1);//printf("%d\n",id1 );
			int id2=search_name(str2);
			map[id1][id2]=map[id2][id1]=t;
		}
		char st[35],ed[35];
		scanf("%s %s",st,ed);
		printf("Scenario #%d\n",kase);
		floyd(search_name(st),search_name(ed));
	}
	return 0;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值