7 15 球隊「食物鏈」天梯訓練2

2022-03-28 21:10:08 字數 1702 閱讀 1027

某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。

聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的「食物鏈」,來說明聯賽的精彩程度。「食物鏈」為乙個1至n的排列,滿足:球隊t1戰勝過球隊t​2 ,球隊t​2戰勝過球隊t​3​​ ,⋯,球隊t​(n−1)​​ 戰勝過球隊t​n​​ ,球隊tn​​ 戰勝過球隊t1​​ 。現在主席請你從聯賽結果中找出「食物鏈」。若存在多條「食物鏈」,請找出字典序最小的。

輸入第一行給出乙個整數n(2≤n≤20),為參賽球隊數。隨後n行,每行n個字元,給出了n×n的聯賽結果表,其中第i行第j列的字元為球隊i在主場對陣球隊j的比賽結果:w表示球隊i戰勝球隊j,l表示球隊i負於球隊j,d表示兩隊打平,-表示無效(當i=j時)。輸入中無多餘空格。

按題目要求找到「食物鏈」t​1t2 ⋯ tn,將這n個數依次輸出在一行上,數字間以1個空格分隔,行的首尾不得有多餘空格。若不存在「食物鏈」,輸出「no solution」。

5-lwdw

w-ldw

ww-lw

dww-w

ddlw-

1 3 5 4 2

5-wddw

d-dwl

dd-dw

ddw-d

dddd-

no solution

#include#include#include#include#include#include#include#include#include#include#define sf scanf

#define pf printf

#define scf(x) scanf("%d",&x)

#define scff(x,y) scanf("%d%d",&x,&y)

#define scfff(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define prf(x) printf("%d\n",x)

#define mm(x,b) memset((x),(b),sizeof(x))

#define rep(i,a,n) for (int i=a;i=n;i--)

#define de(x) cout<<#x<<"="<#define mp make_pair

typedef long long ll;

const ll mod=1e9+7;

const double eps=1e-8;

const int inf=0x3f3f3f3f;

using namespace std;

const double pi=acos(-1.0);

const int n=1e4+10;

char a[25][25],s[25][25];

int used[25];

listv;

int n;

bool dfs(int x)

int temp=0;

rep(i,1,n+1)//判斷是否要剪枝

if(temp==0) return false;

rep(i,1,n+1) }

return false;

}int main()

} rep(i,1,n+1)

return 0;

} }cout<<"no solution";

return 0;

}

天梯賽 球隊「食物鏈」

搜尋,狀壓判重 f s i 狀態為s,i為最後乙個 用f記錄某個狀態是不是已經不合法了 因為對於乙個有x位的狀態t,確定好最後乙個,有 x 1 種方式搜尋的這一狀態 因為只有最後乙個才會影響後面,所以他們的後效性都是一樣的 includeusing namespace std intn,full c...

7 15 球隊「食物鏈」 DFS 剪枝)

某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的 食物鏈 來說明聯賽的精彩程度。食物鏈 為乙個1至n的排列,滿足 球隊t 1 戰勝過球隊t 2 球隊t 2 戰...

球隊「食物鏈」

某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的 食物鏈 來說明聯賽的精彩程度。食物鏈 為乙個1至nnn的排列,滿足 球隊t1戰勝過球隊t2t 2t 2 球隊...