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]<<" ";
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    JAVA第六次作业
    20194672自动生成四则运算题第一版报告
    20194672自动生成四则运算第一版报告
    第四次博客作业--结对项目
    第9次作业--接口及接口回调
    第8次作业--继承
    软件工程第三次作业——关于软件质量保障初探
    第7次作业——访问权限、对象使用
    第6次作业--static关键字、对象
    Java输出矩形的面积和周长
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8017754.html
Copyright © 2011-2022 走看看