1. 程式人生 > >[USACO1.3]蟲洞wormhole

[USACO1.3]蟲洞wormhole

思路:這道題我用的是暴力列舉,其實開始我沒有搞懂題意,後來在同學的幫助下知道了:

1.構造一個表格,先列舉1-n數字在表格中的位置

2.列舉貝茜的出發點,再判斷是否卡住了

40分程式碼(還沒有找到錯誤):

#include <bits/stdc++.h>
using namespace std;
int n,x[15],y[15],a[15],b[15];
int pd()
{
    for(int i=1;i<=n;i++){
        int flag=i;
        for(int tot=0;tot<n;tot++)
            flag=a[
b[flag]]; if(flag!=0) return 1; } return 0; } int dfs(){ int ans=0,k; for(int i=1;i<=n;i++) if(b[i]==0){ k=i; break; } if(k>n){ if(pd()) return 1; else return 0; } for(int j=
k+1;j<=n;j++) if(b[j]==0){ b[j]=k; b[k]=j; ans+=dfs(); b[k]=0; b[j]=0; } return ans; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>x[i]>>y[i]; for(int i=1;i<n;i++) for
(int j=1;j<n;j++) if(x[j]>x[i]&&y[i]==y[j]) if(a[i]==0||x[j]-x[i]<x[a[i]]-x[i]) a[i]=j; cout<<dfs(); return 0; }