HDU 2112
来源:互联网 发布:chart.js 提示文字 编辑:程序博客网 时间:2024/06/13 11:24
最短路问题,我用的是dijkstra算法,网上说很水,可是我还是费了老鼻子劲才写出来。http://acm.hdu.edu.cn/showproblem.php?pid=2112
题意:说的是如何用最短时间到达目的地。如果到不了就输出-1.
思路:大家都知道dijkstar算法求最短路且权值为正,但是这个题在于要把字符串给转换成一种可以用上最短路算法的形式,网上还有一种用STL的解法,如果有兴趣可以看下。我的主要办法是将字符串赋予一个标记来表示,这样问题就迎刃而解了。
#include <iostream>
#include <cstring>
#define maxn 155
using namespace std;
int m;
int vis[maxn];
int dis[maxn];
char ad[maxn][40];
int map[maxn][maxn];
int bian(char *s)//没办法还是用了指针
{
int i;
for(i=0;i<m;i++)
{
if(strcmp(ad[i],s)==0)return i;//如果有就将编号返回去
}
if(i==m)//如果没出现就添加进去
{
strcpy(ad[m],s);
m++;
return m-1;
}
}
void dijkstra()//算法基本套路
{
int i,j,next,mindist;
memset(vis,0,sizeof(vis));
for(i=0;i<m;i++)
{
dis[i]=map[0][i];//从0开始进行选择
}
vis[0]=1;//0不用访问
for(i=0;i<m;i++)
{
mindist=9999;//赋值之后方便求最小的
for(j=0;j<m;j++)
{
if(!vis[j]&&mindist>dis[j])
{
next=j;
mindist=dis[j];
}
}
if(mindist==9999)break;
vis[next]=1;
for(j=0;j<m;j++)
{
if(!vis[j]&&dis[next]+map[next][j]<dis[j])
{
dis[j]=dis[next]+map[next][j];
}
}
}
if(dis[1]==9999)
{
cout<<"-1"<<endl;
}
else
{
cout<<dis[1]<<endl;
}
}
int main()
{
int n;
int x,y;
int fenzhong;
char st[40],en[40];
char in[40],out[40];
while(cin>>n&&n!=-1)
{
m=2;
for(int i = 0 ;i < maxn ;i++)
{
for(int j = 0 ;j < maxn ;j++)
{
if(i==j)map[i][j]=0;
else map[i][j]=9999;
}
}
cin>>st>>en;
strcpy(ad[0],st);
strcpy(ad[1],en);
for(int i = 0 ; i < n ;i++)
{
cin>>in>>out>>fenzhong;
x=bian(in);//将字符串换成我们熟悉的下标
y=bian(out);
map[x][y]=map[y][x]=fenzhong;//赋值
}
if(strcmp(st,en)==0)//如果目的地和起点一样那就直接输出
{
cout<<"0"<<endl;
}
else
{
dijkstra();
}
}
return 0;
}
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- Hdu-2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- HDU 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 hdu today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112:HDU Today
- 用VC6扩展CButton类制作风格独特的按钮
- 暑假第3周工作周报
- CSS hack 总结
- sdnu 1087.过河(NOIP 2005 提高组)DP状态压缩
- AngularJS初学习
- HDU 2112
- Gas Station
- Java注解之分类
- UITableView 及其传值
- I学霸官方免费教程三:Java基础之注释 关键字 标识符
- 老版本上的兼容ripple效果以及通用selecter
- 迷宫问题(栈解决)--2015年8月9日19:23:23v1.0版
- Socket套接字
- Java笔试面试题004