zoukankan      html  css  js  c++  java
  • uva 208 Firetruck

    注意可能有很多点,但是只有一条路与终点相通。不剪枝一定超时,所以先从终点开始
    #include "stdio.h"
    #include "string.h"
    
    int ans,sum,vis[25][25],cnt,v[25],c[25],ok[25];
    
    void pdfs(int st)//从后面开始搜索,标记所以可能的点
    {
        int i;
        for(i=0;i<25;i++) 
        if(vis[st][i]&&!ok[i])
        {
            ok[i]=1;
            pdfs(i);
        }
    }
    void dfs(int st,int t)
    {
    
        int i;
        if(st==ans)
        {
            cnt++;
            for(i=1; i<t; i++) printf("%d ",v[i]);
            printf("%d
    ",ans);
            return;
        }
        for(i=1; i<22; i++)
        {
            if(vis[st][i]&&!c[i]&&ok[i])
            {
                c[i]=1;
                vis[st][i]= vis[i][st]=0;
                v[t]=st;
                dfs(i,t+1);
                vis[st][i]= vis[i][st]=1;
                c[i]=0;
            }
        }
    }
    
    int main()
    {
        int a,b,cas=0;
        while(~scanf("%d",&ans))
        {
            memset(vis,0,sizeof(vis));
            memset(c,0,sizeof(c));
            memset(ok,0,sizeof(ok));
            while(scanf("%d%d",&a,&b))
            {
                if(a==0&&b==0) break;
               vis[b][a]= vis[a][b]=1;
            }
            printf("CASE %d:
    ",++cas);
            cnt=0;
            pdfs(ans);
            c[1]=1;
            dfs(1,1);
            printf("There are %d routes from the firestation to streetcorner %d.
    ",cnt,ans);
        }
        return 0;
    }

    进行一次搜索,将相连的点标记一下。

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    cron表达式详解
    C# Quartz 调度任务辅助类
    SQLserver查询用逗号隔开的字段中是否包含另一个字段的值
    c# 将字符串转换为逻辑表达式(字符串转换布尔)
    铺砖块
    字符串涂漆
    快餐店
    乘号加号
    传纸条(lgP1006)
    小明的喷漆计划
  • 原文地址:https://www.cnblogs.com/xryz/p/4848111.html
Copyright © 2011-2022 走看看