当前位置: 首页 > 工具软件 > Wormhole > 使用案例 >

虫洞 Wormhole

郭盛
2023-12-01

虫洞 Wormhole

莫得想法。。。

去luogu上搜了一下。。。。

把所有的代码抄了一遍

#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
    int x;int y;
} a[30];
int b[30];
int ans;
bool cmp(node aa,node bb)
{
    if (aa.y==bb.y) return aa.x<bb.x;
    return aa.y<bb.y;
}
int f(int num,int d,int begin,int p1)
{ 
    if (num!=1&&d==begin&&p1==1) return 1; 
    if (p1==0)
    {
        if (a[d].y==a[d+1].y) return f(num+1,d+1,begin,1);
        else return 0;
    }
    if (p1==1) return f(num+1,b[d],begin,0);
}
bool check()
{
    for (int j=1;j<=n;j++)
        if (f(1,j,j,1)==1) return 1;
    return 0;
}
void dfs(int x)
{
    if (x==n+1)    {if (check()==1) ans++;return;}
    if (b[x]==0)
    {
        for (int i=x+1;i<=n;i++)
            if (b[i]==0)
            {
                b[i]=x;b[x]=i;
                dfs(x+1);
                b[i]=0;b[x]=0;
            }

    }
    if (b[x]!=0) dfs(x+1);
    return;
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d%d",&a[i].x,&a[i].y);
    }
    sort(a+1,a+n+1,cmp);
    dfs(1);
    printf("%d\n",ans);
    return 0;
}
 类似资料: