HDU Tody HDU2112

不想用floyd了 也不一定适合  floyd只能处理小数据

dijkstra算法

wa了很久   一个是dijkstra里面的u   导致RE了无数次   下标溢出

还有就是注意细节  当起点和终点是一个地方的时候  输出0

#include<iostream>
#include<map>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
#define INF 99999999
int m1[][];
map<string,long long>ma;
int dis[];
int vis[];int c; void di()
{ memset(vis,,sizeof(vis));
for(int i=;i<=c;i++)
dis[i]=m1[][i];
vis[]=;
for(int i=;i<c-;i++)
{
int minn=INF;
int u;
for(int j=;j<=c;j++)
{
if(vis[j]==&&dis[j]<minn)
{
u=j;
minn=dis[j]; } }
vis[u]=;
for(int j=;j<=c;j++)
{
if(vis[j]==&&dis[u]+m1[u][j]<dis[j])
{
dis[j]=dis[u]+m1[u][j];
} } } } int main()
{
int n; while(scanf("%d",&n)==&&n!=-)
{ c=;
ma.clear();
string s1,s2;
int ok=;
cin>>s1>>s2;if(s1==s2){ok=;}
ma[s1]=++c;
ma[s2]=++c;
int time1; for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
if(i==j)m1[i][j]=;
else m1[i][j]=INF; } while(n--)
{
cin>>s1>>s2>>time1;
if(ma[s1]==)ma[s1]=++c;
if(ma[s2]==)ma[s2]=++c;
if(time1<m1[ ma[s1] ][ ma[s2] ])
{
m1[ ma[s1] ][ ma[s2] ]=m1[ ma[s2] ][ ma[s1] ]=time1; } } di(); if(!ok)printf("0\n");
else {
if(dis[]!=INF)
printf("%d\n",dis[]);
else
printf("-1\n");
} } return ;
}
上一篇:jquery UI datepicker时间控件的使用


下一篇:Django组件总结