`
fuerbosi
  • 浏览: 464203 次
文章分类
社区版块
存档分类
最新评论

uva 10557 - XYZZY

 
阅读更多

点击打开链接


题目意思:给定n个编号为1-n的房间,每个房间有对应的能量值(-100 - 100),还有给定每一个房间的门的个数,以及通过这些门可以到哪些房间,有一个人从起始点(默认为0房间)开始走,问能否走到终点n房间,如果中间的能量为0或小于0则直接算不能到达。


解题思路:对于过去的搜索题,我么通常用一个vis[]数组标记是否走过,对于这题我么另vis[]数组存储的是从开始到这个点的能量值,还有我们用一个局部遍历energy表示从开始到当前点的能量的变化值(增加就是这个过程能量增大,反之),其它见一下代码,详解。


代码:



//直接dfs,我们知道对于有往回走的点 ,如果往回走的过程能量在增加,那么可知我们无限循环时可得到无穷的能量,所以这时候我们在用一个dfs去判断是否这一点可以达终点如果可以直接退出,不行返回进行下一步。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <stack>
using namespace std;
const int MAXN = 110;

int vis[MAXN], mark[MAXN];//mark数组用来标记走过的路径(在判断是否可以到终点的dfs中用到)
int room[MAXN][MAXN]; //第一数是能量,第二个数是门的个数,第三个开始是能到的房间的编号
int n, flag;

//搜索是否能到最后点
void Dfs(int k) {
    if (mark[k])//如果走过该房间则退出
        return;
    if (k == n) {//到最后时候也退出
        flag = 1;//更新flag的值
        return;
    }
    if (mark[k] == 0) {//如果没走过
        mark[k] = 1;//标记上一点走过了
        for (int j = 0; j < room[k][1]; j++) {
            if (mark[room[k][j + 2]] == 0) {
                Dfs(room[k][j + 2]);//对每一个可能的情况Dfs
            }
        }
    }
}

//深搜求解能量
//这里我们就用一个局部变量energy表示从起始点到该位置的能量的变化值(有正有负),这样就可以对于每一个函数都有一个energy,所以这里要用局部变量,全局会出错
void dfs(int i , int energy) {
    vis[i] = 100 + energy;//求出当前点的能量总和
    if (vis[i] <= 0){//如果小于0,那么就直接退出
        return;
    }
    if (i == n) {//如果到终点就更新flag,退出
        flag = 1;
        return;
    }
    if (vis[i] > 0) {//大于0,继续向一步走
        for (int j = 0; j < room[i][1]; j++) {//遍历每一个可以到的房间
            if (vis[room[i][j + 2]] == -1) {//如果没被走过,直接往下走
                int k = room[i][j+2];
                dfs(room[i][j + 2] , energy + room[k][0]);//这里energy是加上room[k][0],说明到下一点的能量总的变化
            } 
            else {//如果走过,那么判断是否是能量增加
                int k = room[i][j+2];
                if  (room[k][0] + energy + 100 > vis[k]) {//判断重新走到这个点的值room[k][0] + energy + 100是否大于上一次的值vis[k]。
                    memset(mark, 0, sizeof (mark));//每次都要初始化为0
                    Dfs(i);//判断i这个点能否到终点(传K也一样)
                    if(flag)//如果可以到终点直接退出
                       return;
                }
            }
        }
    }
}

//处理问题函数
void solve() {
    memset(vis, -1, sizeof (vis));
    flag  = 0;//默认是为0
    vis[0] = 100;//起始点为100
    dfs(1 , 0);
    if (flag)
        printf("winnable\n");
    else
        printf("hopeless\n");
    
}

//主函数
int main() {
    while (scanf("%d", &n) && n != -1) {//输入注意一下
        for (int i = 1; i <= n; i++) {
            scanf("%d %d", &room[i][0], &room[i][1]);
            for (int k = 0; k < room[i][1]; k++)
                scanf("%d", &room[i][k + 2]);
        }
        solve();
    }
    return 0;
}



分享到:
评论

相关推荐

    PretendYoureXyzzy:纸牌游戏《反人类》的网络克隆

    假装你是Xyzzy A Cards Against Humanity克隆,服务器和Web客户端。 有关完整的详细信息,请参见WebContent / license.html。 注意:该项目仅与Tomcat 7一起使用,不支持所有其他版本。 当前,构建PYX的唯一方法是...

    atom-buffer-list:缓冲区列表(例如Emacs或xyzzy),可以保存关闭的文档

    缓冲区列表(缓冲区菜单),例如Emacs或xyzzy,可以保存/关闭文档。 特征 显示开幕文件清单 保存和/或关闭标记的文档 配置 像这样添加您的keymap.cson: 'atom-workspace': 'ctrl-x ctrl-b': 'buffer-list:show' ...

    pyx-metrics-processor:假装您是Xyzzy游戏玩法指标的处理框架

    假装您的度量处理器是Xyzzy。 从Apache Kafka(0.10.1.0或更高版本)中获取度量标准信息,并将其保存到PostgreSQL(9.5或更高版本;使用INSERT ... ON CONFLICT DO NOTHING)。 删除使用者偏移量后可以安全地重新...

    xyzzy.ansify:在 Common Lisp 的 xyzzy 中找不到的各种计划好的东西

    ANSI Common Lisp 中但不在 xyzzy 中的一系列计划好的东西。 安装 从网络安装程序 。 如何使用 我会暂时阅读它。 (eval-when (:execute :compile-toplevel :load-toplevel) (require "ansify")) ansify 实现的...

    xyzzy:更智能的Clojure拉链

    木乃伊类似于拉链的结构: 以易于检索的形式存储从根到所选节点的路径具有统一的内部树结构(每个分支节点中的:children矢量)基本原理我在...用法添加到您的project.clj : [mkremins/xyzzy " 0.3.4 " ]执照。 乱走。

    Xyzzy:假装您是Xyzzy UI的替代者

    先决条件 节点 npm 口(&gt; = 3.9.0) 安装 npm install 用法 gulp watch serve 转到 特征 ES6(+棉绒) SCSS HTTP服务器 LiveReload

    msgpack-python-0.4.2.tar

    &gt;&gt;&gt; packed = msgpack.packb(msgpack.ExtType(42, b'xyzzy')) &gt;&gt;&gt; msgpack.unpackb(packed) ExtType(code=42, data='xyzzy') You can use it with ``default`` and ``ext_hook``. See below. Note for msgpack ...

    xyzzy.github.io:我的个人博客的Jekyll来源

    xyzzy.github.io:我的个人博客的Jekyll来源

    Cards-against-VGSN

    Docker Your Xyzzy启用您的Xyzzy: docker pull emcniece/dockeryourxyzzy : Docker Hub: 支持的标签和相应的Dockerfile链接: latest , 4 ( )什么是Docker Your Xyzzy?这是“卡”克隆的容器化版本。 :warning...

    find_open_resolvers:查找开放递归域名服务器

    名称 find_open_resolvers -- 在给定的 IP 范围内查找开放的 DNS 解析器。... --fqdn Fully Qualified Domain Name to query for (www.xyzzy.net) --verbose be verbose --help display brief help --man displa

    DockerYourXyzzy:Dockerized Cards Against Humanity克隆-https

    Docker Your Xyzzy 启用您的Xyzzy: docker pull emcniece/dockeryourxyzzy : Docker Hub: 支持的标签和相应的Dockerfile链接: latest , 4 ( ) 什么是Docker Your Xyzzy? 这是“卡”克隆的容器化版本。...

    xpasswd:xpasswd - 用于消化和验证密码的库

    默认摘要版本配置在xpasswd....digest ( "xyzzy" ) . then ( function ( key ) { console . log ( key ) ; // use Promise chaining to validate the password return validate ( "xyzzy" , key ) ; } ) .

    正则表达式获得一个 SubMatches 集合以及它的专有成员.doc

    如果你没有进一步了解元字符,可能不懂其中含义,不过没关系,在这里你只要知道,该代码的任务是显示电子邮箱dragon@xyzzy.com,用户名和组织名. Function SubMatchTest(inpStr) Dim oRe, oMatch, oMatches Set oRe = ...

    xforgot:用于生成密码重置令牌的库

    var token = xforgot ( { secret : "xyzzy" , salt : "foobar" } ) ; // Send token to user via URL... if ( xforgot . verify ( { token : token , secret : "xyzzy" , salt : "foobar" } ) ) { // Reset the ...

    CardsAgainstSociety

    假装你是Xyzzy A Cards Against Humanity克隆,服务器和Web客户端。 有关完整的详细信息,请参见WebContent / license.html。 注意:该项目仅与Tomcat 7一起使用,不支持所有其他版本。 当前,构建PYX的唯一方法是...

    谷歌师兄的leetcode刷题笔记-yatex:Emacs的另一种LaTeX模式

    YaTeX在DOS和Windows上的其他杰出编辑器上都有兄弟,Vz,Wz,Hidemaru,xyzzy.如果您使用YaTeX系列,您可以在任何平台上以相同的界面编写您的文档。 yahtml 是一个诚实和明亮的 YaTeX 兼容的主要模式包,用于编写 ...

    谷歌师兄的leetcode刷题笔记-yatex:emacs的另一种tex模式//野鸟//

    YaTeX在DOS和Windows上的其他杰出编辑器上都有兄弟,Vz,Wz,Hidemaru,xyzzy.如果您使用YaTeX系列,您可以在任何平台上以相同的界面编写您的文档。 yahtml 是一个诚实和明亮的 YaTeX 兼容的主要模式包,用于编写 ...

    WinMineSolver-开源

    使用已实现的作弊功能(xyzzy + Shift + Enter)解决所有WinMine问题。 计算网格的大小并标记所有地雷。

    wandbox:社会编辑服务

    从您最喜欢的编辑器运行Wandbox Vim: : Emacs的: : xyzzy: ://gist.github.com/kikairoya/7544234执照Boost软件许可1.0常问问题如果要添加编译器怎么办? 请求请求到 。如果我想向Wandbox添加功能怎么办?请将...

Global site tag (gtag.js) - Google Analytics