题目链接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85

http://poj.org/problem?id=1130

这两个题只有输入输出形式不一样。ZOJ的麻烦一点,这里用的ZOJ的输入输出方式

解题报告:

1、输入方式sscanf(line,"%d%d",&a,&b);表示在文本line中提取两个整形数据到a,b中

2、从外星人的角度来看,就是搜索单源最短路径,采用的方式是广搜。

3、删除某个点,从入口进入(0号房间),查看是否可以走到外星人的位置,采用深搜。

4、在删除哪一个点时,用枚举即可。

#include <stdio.h>
#include <string.h>
#include <queue> using namespace std; #define INF 0x3f3f3f3f
#define MAXN 105 int n,et;///n个房间,外星人所在的房间
bool data[MAXN][MAXN]; ///图的邻接矩阵
int dis[MAXN]; ///各点到外星人的房间的最短路径长度
int used[MAXN]; ///广度优先搜索,站在外星人的角度看,就是单源最短路径问题
///搜索各个房间到外星人最短距离
void bfs_path()
{
memset(dis,INF,sizeof(dis));
dis[et]=; queue <int>q;
q.push(et); int x;
while(!q.empty())
{
x=q.front(); ///取队列头结点
q.pop();
for(int i=;i<n;i++)
{
///经过房间x到外星人比从房间i到ET更近
if(data[i][x]&&dis[x]+<dis[i])
{
q.push(i);
dis[i]=dis[x]+;
}
}
}
} ///去掉房间i,从房间0出发,判断能否到达外星人房间
///深度优先搜索
///形参id是当前正在搜索的房间编号
int dfs_search(int id)
{
///成功到达外星人房间
if(id==et) return ; ///房间id已经搜索
used[id]=; ///搜索下一个出口
for(int i=;i<n;i++)
{
if(!used[i]&&data[id][i])
{
if(dfs_search(i)) return ;
}
} return ;
} int main()
{
int T,iCase;
char line[];
int a,b;///源房间,目标房间
scanf("%d",&T);
for(iCase=;iCase<T;iCase++)
{
scanf("%d%d\n",&n,&et);
memset(data,false,sizeof(data)); ///读取数据
while(gets(line))
{
if(strcmp(line,"")==)
break;
sscanf(line,"%d%d",&a,&b);
data[a][b]=true;
} bfs_path(); ///枚举搜索最优解
int d=dis[]; int room=; for(int i=;i<n;i++)
{
if(i==et) continue; memset(used,,sizeof(used));
///设置在房间i,也就是说在图中将房间i拿掉
used[i]=; if(!dfs_search()&&dis[i]<d)
{
room=i;
d=dis[i];
}
} if(iCase) printf("\n");
printf("Put guards in room %d.\n",room);
}
return ;
}

广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)的更多相关文章

  1. Dijkstra单源最短路径,POJ(2387)

    题目链接:http://poj.org/problem?id=2387 Dijkstra算法: //求某一点(源点)到另一点的最短路,算法其实也和源点到所有点的时间复杂度一样,O(n^2); 图G(V ...

  2. POJ 1135 -- Domino Effect(单源最短路径)

     POJ 1135 -- Domino Effect(单源最短路径) 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两 ...

  3. Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32824   Accepted: 11098 Description Bes ...

  4. 【算法导论】单源最短路径之Bellman-Ford算法

    单源最短路径指的是从一个顶点到其它顶点的具有最小权值的路径.我们之前提到的广度优先搜索算法就是一种无权图上执行的最短路径算法,即在所有的边都具有单位权值的图的一种算法.单源最短路径算法可以解决图中任意 ...

  5. 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)

    哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...

  6. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  7. Bellman-Ford 单源最短路径算法

    Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...

  8. 洛谷P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...

  9. 单源最短路径算法---Dijkstra

    Dijkstra算法树解决有向图G=(V,E)上带权的单源最短路径问题,但是要求所有边的权值非负. 解题思路: V表示有向图的所有顶点集合,S表示那么一些顶点结合,从源点s到该集合中的顶点的最终最短路 ...

随机推荐

  1. selenium处理页面select元素

    selenium为网页中选择框元素的获取特别引入了一个Select对象, 引入对象的方式: from selenium.webdriver.support.ui import Select 查询文档可 ...

  2. cpp中memset函数的注意点

    可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...

  3. java后台获取服务器相对路径,获取当前时间yyyyMMddHHmmssSSS

    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS"); Date date = new Date( ...

  4. Unity3d C# 创建 物体

    using UnityEngine; using System.Collections; public class create : MonoBehaviour { // Use this for i ...

  5. leetcode 182. Duplicate Emails having的用法 SQL执行顺序

    https://leetcode.com/problems/duplicate-emails/description/ 首先sql的执行顺序是 from-->where-->group b ...

  6. php乱码的解决方法

    一般如果会出现乱码,基本都是因为编码不统一造成的,所以我们只需要把编码改成一样的就好了. 我们编码一般都是以utf-8为主: 文件编码都是UTF-8无BOM,如果文件不是这个编码,可以使用文件编辑器转 ...

  7. Java反射机制分析指南

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

  8. Thinkpad T460声音问题

    ThinkPad T460,安装Windows 7 64位后,下载官网驱动各项正常,但声音在刚启动时正常,很快就变成无声状态,重新启动又会正常,如此反复,重新安装驱动依然存在. 后来在设备管理器中发现 ...

  9. HBase Shell基本使用总结

    创建一个表 hbase(main):002:0> create 'member', 'cf_tmp', 'address', 'info' 查看所有表清单 hbase(main):003:0&g ...

  10. Java中的阻塞队列-ArrayBlockingQueue(一)

    最近在看一些java基础的东西,看到了队列这章,打算对复习的一些知识点做一个笔记,也算是对自己思路的一个整理,本章先聊聊java中的阻塞队列 参考文章: http://ifeve.com/java-b ...