Sicily1031. Campus
来源:互联网 发布:重庆大学网络自助 编辑:程序博客网 时间:2024/05/16 06:12
最短路径问题
// Problem#: 1031
// Submission#: 1165830
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int road[205][205];
int len[205];
int found[205];
int main()
{
int t;
cin>>t;
while(t--)
{
for(int i=0;i<205;i++)
for(int j=0;j<205;j++)
road[i][j]=1000000;
memset(len,1000000,sizeof(len));
memset(found,0,sizeof(found));
int roadnum;
cin>>roadnum;
string a[300];
string beg,end;
int le,count=0,x,y;
for(int i=0;i<roadnum;i++)
{
cin>>beg>>end>>le;
int ok1=0,ok2=0;
for(int i=0;i<count;i++)
{
if(beg==a[i])
{
ok1=1;
x=i;
}
if(end==a[i])
{
ok2=1;
y=i;
}
}
if(!ok1)
{
a[count++]=beg;
x=count-1;
}
if(!ok2)
{
a[count++]=end;
y=count-1;
}
road[y][x]=road[x][y]=le;
}
string beg1,end1;
int source=-1,end2=-1;
cin>>beg1>>end1;
if(beg1==end1)
{
cout<<0<<endl;
continue;
}
for(int i=0;i<count;i++)
{
if(a[i]==beg1)
source = i;
if(a[i]==end1)
end2 = i;
}
if(source==-1||end2==-1)
{
cout<<-1<<endl;
continue;
}
for(int i=0;i<count;i++)
{
len[i]=road[source][i];
}
len[source]=0;
found[source]=1;
int num;
for(int i=0;i<count;i++)
{
int min=1000000;
for(int i=0;i<count;i++)
if(!found[i])
if(len[i]<min)
{
num=i;
min=len[i];
}
found[num]=1;
for(int i=0;i<count;i++)
{
if(!found[i])
if(min+road[num][i]<len[i])
len[i]=min+road[num][i];
}
}
if(!found[end2])
cout<<-1<<endl;
else
cout<<len[end2]<<endl;
}
return 0;
}
- Sicily1031. Campus
- sicily1031-Campus(单源最短路径dijkstra)
- 第五周:( Sicily1031) Campus(c++)
- Sicily1031
- Campus
- In Campus
- Campus cluster
- 1031. Campus
- Campus Address
- 1031. Campus
- 1000. Campus
- 1031. Campus
- No1031.Campus
- Mobile Campus客户端源代码
- Mobile Campus服务端源代码
- life on the campus
- Our College Campus
- Sicily 1031. Campus
- find_first_of()和 find_last_of()
- IM 开源项目 群组服务 数据库设计 (01)
- 关于文件异常捕获--新手篇
- 『C程序设计』读书笔记
- Android 之 内存管理
- Sicily1031. Campus
- linux蓝牙配置
- 设置UIButton字体的大小
- (转)写代码如坐禅:你是哪一类程序员
- Temporary Variable in C++
- wav文件格式分析详解
- 学习STL(一)
- 设置默认浏览器
- 联想B450笔记本拆解步骤