zoukankan      html  css  js  c++  java
  • 洛谷 P1718 图形复原

    题目描述

    HWX小朋友对几何的热爱在电脑组是出了名的,号称“每题必解”,这天,LXC在玩logo的时候突然想到了一个题目,刚好可以去测试一下他封号的虚实,于是,他logo编程画了一个n边形,并且将n个顶点用1,2,3,…,n这n个连续自然数随手编了个号,为了增加难度,他又画了一些不相交的对角线。如下图:

    他把所有的边和对角线都写在一张纸上,对于上图,他写了:(1,3),(3,2),(2,4),(4,5),(5,1),(1,4),(3,4)。正得意的时候,电脑突然自动重启了,郁闷的是,他忘记保存刚才的logo程序了,此刻的他很想利用纸上记录的信息将这个n边形的编号复原,电脑组的你能帮助他吗?

    输入输出格式

    输入格式:

     

    第一行n(n<=50)

    下面若干行,每行两个数a,b,表示纸上记录的信息。

     

    输出格式:

     

    仅一行,按字典序较小的顺序依次输出顶点的编号。对于上面的例子,你的输出应该是1 3 2 4 5。

     

    输入输出样例

    输入样例#1: 复制
    5
    1 3
    3 2
    2 4
    4 5
    5 1
    1 4
    3 4
    
    输出样例#1: 复制
    1 3 2 4 5
    思路:搜索。
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m;
    int ans[60],vis[60],map[60][60];
    bool dfs(int now,int tot){
        if(tot==n+1&&now==1)    return true;
        for(int i=1;i<=n;i++)
            if(map[now][i]&&!vis[i]){
                vis[i]=1;map[now][i]=map[i][now]=0;ans[tot]=i;
                if(dfs(i,tot+1))    return true;
                vis[i]=0;map[now][i]=map[i][now]=1;
            }
        return false;
    }
    int main(){
        scanf("%d",&n);
        int a,b;
        while(scanf("%d%d",&a,&b)!=EOF)
            map[a][b]=map[b][a]=1;
        dfs(1,1);
        cout<<"1"<<" ";
        for(int i=1;i<n;i++)
            cout<<ans[i]<<" ";
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网
    如何判断服务器是物理机还是虚拟机
    生成Oracle的AWR报告
    Oracle数据库自带表空间
    Oracle数据库用户锁定原因以及处理方式(ORA-28000)
    Nginx反向代理和负载均衡
    Linux上Tomcat部署JavaWeb项目
    linux下memcached安装以及启动
    linux上安装activeMQ
    Windows下ActiveMQ下载、安装部署
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8017754.html
Copyright © 2011-2022 走看看