zzuoj 找最佳通路

校内的OJ,得把题目粘上来

Description

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

Input

  输入由若干行组成,第一行有四个整数,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 条边的 信息,每行两个整数,为边的起点和终点。

Output

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

Sample Input

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

Sample Output

  5

题解:这是今天讲的使用BFS来找最短路径的问题,有关DFS和BFS我还是单独写一篇来讲一下我的感悟。

这道题是典型的BFS问题,这里直接上代码。

顺手又用DFS撸了一遍

BFS

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<queue>
 5 #define maxn 52
 6 using namespace std;
 7
 8 bool path[maxn][maxn];
 9 int ctm[maxn];
10 bool city[maxn];
11 int n,pn,s,v,num;
12
13 queue<int> q;
14
15 void init()
16 {
17     for(int i=1;i<=n;i++)
18         for(int j=1;j<=n;j++)
19             path[i][j]=false;
20
21     memset(city,true,sizeof(city));
22
23 }
24
25 void bfs(int s,int v)
26 {
27     int now;
28     q.push(s);
29     ctm[s]=1;
30     city[s]=false;
31     while(!q.empty()){
32         now=q.front();
33         q.pop();
34         for(int i=1;i<=n;i++){
35             if(city[i]&&path[now][i]){
36                 city[i]=false;
37                 q.push(i);
38                 ctm[i]=ctm[now]+1;
39                 if(i==v){
40                     num=ctm[i];
41                     return ;
42                 }
43             }
44         }
45     }
46 }
47
48 int main()
49 {
50     scanf("%d%d%d%d",&n,&pn,&s,&v);
51
52     init();
53
54     int u,v;
55     for(int i=1;i<=pn;i++){
56
57         scanf("%d %d",&u,&v);
58         path[u][v]=true;path[v][u]=true;
59     }
60
61     bfs(s,v);
62
63     printf("%d\n",num);
64
65     return 0;
66 }

BFS

#include<cstdio>
#include<cstring>
#define INF 999999999
#define maxn 53

using namespace std;

bool path[maxn][maxn];
bool f[maxn];
int n,pn,s,v,mi,des,num;

void init()
{
    memset(path,false,sizeof(path));
    memset(f,true,sizeof(f));

    f[s]=false;
    mi=INF;des=1;
}

void dfs(int s,int v)
{
    for(int i=1;i<=n;i++){
        if(f[i]&&path[s][i]){

            des++;
            if(i==v){

                if(des<mi){
                    mi=des;
                    num=des;
                }
            }
            f[i]=false;
            dfs(i,v);
            des--;
            f[i]=true;
        }
    }
}

int main()
{
    scanf("%d%d%d%d",&n,&pn,&s,&v);
    init();

    int u,l;
    for(int i=0;i<pn;i++){
        scanf("%d%d",&u,&l);
        path[u][l]=true;
    }

    dfs(s,v);

    printf("%d",num);

    return 0;
}
 
时间: 2024-08-10 21:29:54

zzuoj 找最佳通路的相关文章

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表示出发点和

设置最佳线程数总结

看到一篇关于最佳线程数相关的文章,内容比较经典,不敢私藏,分享一下! 最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加.这个阀值我们认为是最佳线程数. 为什么要找最佳线程数 1.过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助 2.找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出 最佳线程数的获取: 1.通过用户

Tomcat设置最佳线程数总结

最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加.这个阀值我们认为是最佳线程数. 为什么要找最佳线程数 1.过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助 2.找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出 最佳线程数的获取: 1.通过用户慢慢递增来进行性能压测,观察QPS,响应时间 2.根据公式计算:服务器

最佳线程数总结

最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加.这个阀值我们认为是最佳线程数. 为什么要找最佳线程数 1.过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助 2.找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出 最佳线程数的获取: 1.通过用户慢慢递增来进行性能压测,观察QPS,响应时间 2.根据公式计算:服务器

HDU 1533 KM算法(权值最小的最佳匹配)

Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3299    Accepted Submission(s): 1674 Problem Description On a grid map there are n little men and n houses. In each unit time, every l

Android寻找匹配最佳资源的原理

原文地址:http://developer.android.com/guide/topics/resources/providing-resources.html 当应用中提供复选资源的时候,Android系统会依据当前前的系统配置,在运行过程中寻找最优的资源.下面,以这几个文件中的图片资源为例,解析Android系统定位多选资源的过程: drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-1

iOS原生和H5的相互调用

为什么现在越来越多的APP中开始出现H5页面? 1,H5页面开发效率更高,更改更加方便: 2,适当缩小APP安装包的大小: 3,蹭热点更加方便,比如五一,十一,双十一搞活动: 那么为什么说H5无法取代原生的APP,只能处在一个共存的例子呢? 1,这个是由系统的底层决定的,极端例子,所有的应用都通过H5展示,那么你是否需要一个浏览器? 2,涉及庞大的功能,涉及复杂的逻辑结构,涉及安全性的要求,H5可以胜任吗? 所以,H5和原生的融合会出现动态的调和,最终会找到一个平衡. 那么接下来就说下iOS开发

Qt中文显示

QT默认的编码(unicode)是不能显示中文的,可能由于windows的默认编码的问题,windows默认使用(GBK/GB2312/GB18030),所以需要来更改QT程序的编码来解决中文显示的问题. QT中有专门的一个类来处理编码的问题(QTextCodec). 在QT3中,QApplication可以设置程序的默认编码,但是在QT4中已经没有了该成员函数.可以以下的这些方法来设置编码. 1. 设置QObject的成员函数tr()的编码. QTextCodec::setCodecForTr

【转载】如果有人问你数据库的原理,叫他看这篇文章

原文:如果有人问你数据库的原理,叫他看这篇文章 本文由 伯乐在线 - Panblack 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Christophe Kalenzaga.欢迎加入翻译组. 一提到关系型数据库,我禁不住想:有些东西被忽视了.关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata .但很少有文章讲解数据库是如何工作的.你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少[译者注:百度为您找到相关结果约1,850,000个…]