1.19小计

今天A掉了4道题呢……(掌声)

从今天开始,我大概就要开始步入动态规划的殿堂了(嗯嗯)。其中两道是智障一般的图论题,没什么可说的直接贴题。

P1209 几何图形还原
小修是个几何迷。她有一天画了一个正n边形,并且将n个顶点用1,2,…,n这n个连续自然数随手编了一下号。然后她又画了一些不相交的对角线。如下图:

::点击图片在新窗口中打开::

她把所有的边和对角线都写在一张纸上。对上图,她写了:(1,3), (3,2), (2,4), (4,5), (5,1), (1,4), (3,4)。
过了几个星期,她无意中发现了这张写着字的纸,可是怎么也找不着那个几何图形了。她很想把n边形的编号复原,可是试了一天也没弄出来。你能帮助她吗?
输入格式 Input Format
第一行n(n<=50)。
下面的若干行每行两个数a, b。表示纸上写着(a,b)。
输出格式 Output Format
仅一行,按顺序依次输出顶点的编号。对于上面的例子,你的输出应该是1 3 2 4 5。
1 5 4 2 3也是符合题目要求的。两者区别只是逆时针和顺时针而已。
但是你的输出只能是1 3 2 4 5!也就是说你必须把两个符合要求的输出比较大小(先比较第一位;第一位相等就比较第二位;第二位相等……以此类推),你的输出应该是较小者!(这是为了评测的方便)

样例输入 Sample Input

5
1 3
3 2
2 4
4 5
5 1
1 4
3 4

样例输出 Sample Output

1 3 2 4 5
时间限制 Time Limitation
1s

#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<memory>
#include<algorithm>
#include<string>
#include<climits>
using namespace std;

int n,m,sum,s;
int ans[60];
bool all,is=false;
bool a[60][60]={
  0},ar[60]={
  0};

void dfs(int k,int set)
{
    if(is==true)
        return;
    ans[set]=k;
    for(int j=1;j<=n;j++)
    {
        if(a[k][j]==1 && k!=j && ar[j]==0)
        {
            ar[j]=1;
            dfs(j,set+1);
            ar[j]=0;
        }
    }
    if(set==n && a[k][s]==1)
    {
        for(int j=1;j<=n;j++)
            cout<<ans[j]<<' ';
        is=true;
        return;
    }
}

int main()
{
//freopen("in.txt","r",stdin);
cin>>n;
for(int i=0;i<=n+n-3;i++)
{
    int x,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值