• Uva 10557 XYZZY


    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1498

    题意的意思是给你n个房间,每个房间有一个价值,每个房间可以通向一些其他的房间,然后每个房间可以访问多次= =里面的价值也可以多次取,问你是否能够从1房间走到n房间,走的路程中价值要大于0,初始的价值为100。。

    这题说到底还是搜索。。。。但是当图中存在正环的时候,那么就可以直接从搜索所有路径看是否存在到终点的路径,如果不存在的话,就老老实实搜索是否能够保持在大于0的价值走到终点

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    using namespace std;
    int n;
    int a[150];
    int vis[150];
    int d[150];
    vector<int>V[150];
    int dfs(int u)
    {
        if(u==n)
        return 1;
        vis[u]=1;
        for(int i=0;i<V[u].size();i++)
        {
            int v=V[u][i];
            if(!vis[v])
            {
             if(dfs(v))
             return 1;
             }
        }
        return 0;
    }
    int DFS(int u,int E)
    {
        if(u==n)
        return 1;
        d[u]=E+a[u];
        for(int i=0;i<V[u].size();i++)
        {
            int v=V[u][i];
            if(d[u]+a[v]>0)
            {
                if(!d[v])//表示v未访问过 ,直接访问 
                {
                if(DFS(v,d[u]))
                return 1;
                }        
                else if(d[u]+a[v]>d[v])//访问过,看看是否能够成正环,如果能成正环,直接从该点搜索看是否能够到达重点 
                 {
                     memset(vis,0,sizeof(vis));
                    if(dfs(v))
                    return 1;
                }
            }
        }
        return 0;
    }
    int main()
    {
        int m,k;
        while(scanf("%d",&n)!=EOF&&n!=-1)
        {
            memset(a,0,sizeof(a));
            memset(d,0,sizeof(d));
            for(int i=1;i<=n;i++)
            V[i].clear();
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                scanf("%d",&m);
                for(int j=0;j<m;j++)
                {
                    scanf("%d",&k);
                    V[i].push_back(k);
                }
            }
            if(DFS(1,100))
            {
                printf("winnable
    ");
            }
            else
            printf("hopeless
    ");
        }
        return 0;
    }
  • 相关阅读:
    git指令-撤销修改
    git指令-管理修改
    jquery高级
    jquery
    sql的练习题
    git指令-工作区和暂存区
    java-多线程安全-锁
    oracle习题-emp表查询练习
    java-异常进阶-包的使用
    oracle-函数总结
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580161.html
Copyright © 2020-2023  润新知