73. 找最佳通路

★☆   输入文件:city.in   输出文件:city.out   简单对比

时间限制:1 s   内存限制:128 MB

问题描述
有 n 个 城市,它们之间的交通情况已知。现在要求根据一个出发点Cs和一个到达点Cd,请编程序,由计算机找到从城市Cs 到 Cd 的一条路径,要求经过城市最少。

【输入格式】

输入文件: city.in

输入由若干行组成,第一行有四个整数,n(1≤n≤50)、m(1≤m≤n*n)和s(1≤s≤n)、e(1≤e≤n);n表示城市数,m表示道路数,s和e表示出发点和到达点。

第 2至m+1行是m 条边的 信息,每行两个整数,为边的起点和终点。

【输出格式】

输出文件: city.out

一个整数,经过城市的个数(包括起点和终点)

【输入样例】

输入文件名:city.in

6 6 1 5 
1 3 
2 6 
3 6 
3 2 
6 4 
4 5

输出文件名:city.out

5

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>

using namespace std;
const int N=55;
const int INF=99999999;

int map[N][N];
int n,m,start,endd;
int u,v;

inline int read()
{
	int x=0;int f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
	return x*f;
}

int main()
{
	freopen("city.in","r",stdin);
	freopen("city.out","w",stdout);
	n=read(),m=read(),start=read(),endd=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			map[i][j]=INF;
	for(int i=1;i<=n;i++)
		map[i][i]=0;
	for(int i=1;i<=m;i++)
		u=read(),
		v=read(),
		map[u][v]=map[v][u]=1;
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
	printf("%d",map[start][endd]+1);
	return 0;
}

  

posted @ 2017-07-13 08:46  ioioioioioio  阅读(173)  评论(0编辑  收藏  举报