题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2112

分析:多了一个地方的条件,用map来映射地点编号,Dijkstra求解即可

//2013-10-31 14:17:50    Accepted    2112    1921MS    408K    2388 B    C++    空信高手
#include <iostream>
#include <string>
#include <map> using namespace std;
#define N 160
#define INF 0x3F3F3F3F
map<string,int> map1;
int f,cost[N][N]; int path[N],vis[N]; /*==================================================*\
| Dijkstra 数组实现O (N^2 )
| Dijkstra --- 数组实现( 在此基础上可直接改为STL 的Queue实现)
| lowcost[] --- beg 到其他点的最近距离
| path[] -- beg为根展开的树,记录父亲结点
\*==================================================*/ void Dijkstra(int lowcost[N],int n,int beg)
{
int i,j,min;
memset(vis,,sizeof(vis));
vis[beg]=;
for(i=; i<n; i++)
{
lowcost[i]=cost[beg][i];
path[i]=beg;
}
lowcost[beg]=;
path[beg]=-;
int pre=beg;
for(i=; i<n; i++)
{
min=INF;
for(j=; j<n; j++)
//下面的加法可能导致溢出,INF不能取太大
if(vis[j]==&&lowcost[pre]+cost[pre][j]<lowcost[j])
{
lowcost[j]=lowcost[pre]+cost[pre][j];
path[j]=pre;
}
for(j=; j<n; j++)
if(vis[j]==&&lowcost[j]<min)
{
min=lowcost[j];
pre=j;
}
vis[pre]=;
}
}
void Init()
{
int i,j;
for(i=; i<N; i++)
for(j=; j<N; j++)
cost[i][j]=INF;
} int Judge(string str)
{
pair<map<string,int>::iterator,bool> iter;
iter = map1.insert(make_pair(str,++f));
if(iter.second) return f;
else
{
--f;
return map1[str];
}
} int main()
{
int n,i,j,k,a,b;
string firstName,lastName;
int dis;
// freopen("input.txt","r",stdin);
while(cin>>n&&n!=-)
{
map1.clear();
int lowcost[N];
Init();
f=;
cin>>firstName>>lastName;
a=Judge(firstName);b=Judge(lastName);//a是起点,b是终点
for(i=; i<n; i++)
{
cin>>firstName>>lastName>>dis;
j=Judge(firstName);k=Judge(lastName);
cost[j-][k-]=cost[k-][j-]=dis;
}
Dijkstra(lowcost,f,a-);
if(lowcost[b-]<INF)cout<<lowcost[b-]<<endl;
else cout<<"-1"<<endl;
// for(map<string,int>::iterator it=map1.begin(); it!=map1.end(); it++)
// cout<<it->first<<" "<<it->second<<endl;
}
return ;
}

最新文章

  1. Icacls 在windows目录文件授权中的应用
  2. 矩阵乘法快速幂 codevs 1250 Fibonacci数列
  3. 【暑假】[基本数据结构]根据in_order与post_order构树
  4. HDU-4738 Caocao&#39;s Bridges 边联通分量
  5. SQLite 在Windows Server 2008 R2 部署问题FAQ汇总[轉]
  6. Web Service实例——天气预报
  7. iOS中使用UIWebView与JS进行交互
  8. BitmapFactory.decodeResource(res, id); 第一个参数跟第二个参数有什么关系?
  9. inet address example(socket)
  10. 关于多线程中GCD的使用
  11. js版九宫格拼图与启发式搜索(A*算法)
  12. Android 代码混淆配置总结
  13. 监控报I/O问题,怎么办?
  14. iOS高效裁剪图片圆角算法
  15. pytorch 参数初始化
  16. JS 高级总结
  17. [原]Veracrypt使用Yubikey作为安全令牌
  18. 【转】Java学习---快速掌握RPC原理及实现
  19. System.in的用法
  20. 使用eclipse在linux下开发C/C++

热门文章

  1. Java 字节流实现文件读写操作(InputStream-OutputStream)
  2. THREE.js代码备份——canvas_lines(随机点、画线)
  3. Tables for condition techniques
  4. linux常用命令收集(持续中)
  5. Arrays.asList的使用及异常问题
  6. mtu
  7. IOS应用开发版本控制工具之Versions使用
  8. 关于Resources.LoadAssetAtPath
  9. Daject初探 - 从Table模型得到Record模型
  10. xcode 编译错误的 之 头文件 包含成.m了