POJ2263 dij应用
2011-08-24 23:39
169 查看
挺典型也挺简单的。
要理解清楚dij最短路算法其实是一种DP算法。
#include<iostream>
#include<map>
#include<string>
using namespace std;
int r,n;
const int N=205;
const int R=19905;
map<string,int> mymap;
int mat
;
int d
;
bool visit
;
const int inf=999999999;
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
void dij(int u,int v)
{
memset(d,0,sizeof(d));
memset(visit,false,sizeof(visit));
int now=u;
visit[now]=true;
d[now]=inf;
for(int i=1;i<=n-1&&!visit[v];i++)
{
int max=0;
int maxk=0;
for(int j=1;j<=n;j++)
{
if(!visit[j])
{
if(mat[now][j]!=inf&&d[j]<min(mat[now][j],d[now]))
{
d[j]=min(mat[now][j],d[now]);
}
if(max<d[j])
{
max=d[j],maxk=j;
}
}
}
visit[maxk]=true;
now=maxk;
}
printf("%d tons\n\n",d[v]);
}
int main()
{
//freopen("C:\\Users\\wuyanyisb\\Desktop\\1.txt","r",stdin);
int cases=1;
while(scanf("%d%d",&n,&r),n!=0||r!=0)
{
mymap.clear();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
mat[i][j]=inf;
char stra[32],strb[32];
int k=1;
int c;
for(int i=1;i<=r;i++)
{
scanf("%s",stra);
scanf("%s",strb);
scanf("%d",&c);
if(mymap[stra]==0)
mymap[stra]=k++;
if(mymap[strb]==0)
mymap[strb]=k++;
mat[mymap[stra]][mymap[strb]]=c;
mat[mymap[strb]][mymap[stra]]=c;
}
scanf("%s %s",stra,strb);
printf("Scenario #%d\n",cases++);
dij(mymap[stra],mymap[strb]);
}
return 0;
}
要理解清楚dij最短路算法其实是一种DP算法。
#include<iostream>
#include<map>
#include<string>
using namespace std;
int r,n;
const int N=205;
const int R=19905;
map<string,int> mymap;
int mat
;
int d
;
bool visit
;
const int inf=999999999;
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
void dij(int u,int v)
{
memset(d,0,sizeof(d));
memset(visit,false,sizeof(visit));
int now=u;
visit[now]=true;
d[now]=inf;
for(int i=1;i<=n-1&&!visit[v];i++)
{
int max=0;
int maxk=0;
for(int j=1;j<=n;j++)
{
if(!visit[j])
{
if(mat[now][j]!=inf&&d[j]<min(mat[now][j],d[now]))
{
d[j]=min(mat[now][j],d[now]);
}
if(max<d[j])
{
max=d[j],maxk=j;
}
}
}
visit[maxk]=true;
now=maxk;
}
printf("%d tons\n\n",d[v]);
}
int main()
{
//freopen("C:\\Users\\wuyanyisb\\Desktop\\1.txt","r",stdin);
int cases=1;
while(scanf("%d%d",&n,&r),n!=0||r!=0)
{
mymap.clear();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
mat[i][j]=inf;
char stra[32],strb[32];
int k=1;
int c;
for(int i=1;i<=r;i++)
{
scanf("%s",stra);
scanf("%s",strb);
scanf("%d",&c);
if(mymap[stra]==0)
mymap[stra]=k++;
if(mymap[strb]==0)
mymap[strb]=k++;
mat[mymap[stra]][mymap[strb]]=c;
mat[mymap[strb]][mymap[stra]]=c;
}
scanf("%s %s",stra,strb);
printf("Scenario #%d\n",cases++);
dij(mymap[stra],mymap[strb]);
}
return 0;
}
相关文章推荐
- 设计文档: GPS应用开发
- 应用xp控件的样式
- Apusic应用服务器的性能调节_JVM优化
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 3)
- 配置Apache+Tomcat支持多个应用,即多个二级域名
- BREW应用的空中下载
- 在MFC应用中深入定制WebBrowser控件(转)
- 队列的应用 之 M/D/1队列
- java中的内部类详解和应用
- Sensor传感器源码的阅读与应用开发简单实例
- js中encode、decode的应用说明
- CBO,RBO在ORACLE中的应用
- 正则表达式在objectiv-c中的简单应用
- C#中StreamWriter应用实例
- 将“懒人”哲学运用于大规模的商业SOA应用开发
- iOS开发之应用首次启动显示用户引导
- 完美解决Windows 应用商店没有推送Win8.1的问题
- 错排公式,推导和应用
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)