poj 2263

来源:互联网 发布:古剑奇谭ol激活码淘宝 编辑:程序博客网 时间:2024/04/30 17:42

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

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

哭了- -

去补dijstra- -

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


#include <fstream>#include <iostream>#include <cstdio>#include <string.h>#include <vector>using namespace std;#define INF 0x3f3f3f3fconst 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
原创粉丝点击