L3 2 球隊「食物鏈」(30 分)

2021-08-17 22:14:03 字數 1864 閱讀 6209

n支參賽球隊,編號從1至

n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。

聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的「食物鏈」,來說明聯賽的精彩程度。「食物鏈」為乙個1至

n的排列,滿足:球隊t​

1​​戰勝過球隊t​

2​​,球隊t​

2​​戰勝過球隊t​

3​​,

⋯,球隊t​

(n−1

)​​戰勝過球隊t​

n​​,球隊t​

n​​戰勝過球隊t​

1​​。

現在主席請你從聯賽結果中找出「食物鏈」。若存在多條「食物鏈」,請找出字典序最小的。

注:排列在字典序上小於排列,當且僅當存在整數k(

1≤k≤

n),滿足:a​

k​​k​

​且對於任意小於

k的正整數i,

a​i​

​=b​

i​​。

輸入第一行給出乙個整數n(

2≤n≤

20),為參賽球隊數。隨後

n行,每行

n個字元,給出了n×

n的聯賽結果表,其中第i行第

j列的字元為球隊

i在主場對陣球隊

j的比賽結果:w表示球隊

i戰勝球隊

j,l表示球隊

i負於球隊

j,d表示兩隊打平,-表示無效(當i=

j時)。輸入中無多餘空格。

按題目要求找到「食物鏈」t​

1​​t

​2​​

⋯ t​

n​​,將這

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

暴力dfs,注意有個位置要剪枝, 剪去的是 後面未取出的都不能戰勝一號。 

#include#include #include #include #include #include using namespace std;

char s[200];

int mp[40][40];

int vis[200];

int ans[200];

int n;

int cnt=0;

int flag=1;

setst;

void dfs(int u,int ced)

flag=0;

return ;

}int has=0;

for(int i=1;i<=n;i++)

}

if(!has)

return ;

for(int i=1;flag&&i<=n;i++)

}}int main()

}cnt=1;

vis[1]=1;

ans[1]=1;

dfs(1,2);

if(flag)

printf("no solution");

return 0;

}

L3 2 球隊「食物鏈」 30分

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

L3 015 球隊「食物鏈」 30分

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

球隊「食物鏈」

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