演算法訓練 排列問題

2021-07-10 19:36:32 字數 1214 閱讀 6752

問題描述

求乙個0~n-1的排列(即每個數只能出現一次),給出限制條件(一張n*n的表,第i行第j列的1或0,表示為j-1這個數不能出現在i-1這個數後面,並保證第i行第i列為0),將這個排列看成乙個自然數,求從小到大排序第k個排列。

資料規模和約定

n<=10,k<=500000

輸入格式

第一行為n和k,接下來的n行,每行n個數,0表示不能,1表示能

輸出格式

所求的排列

樣例輸入

3 2

0 1 1

1 0 0

0 1 0

樣例輸出

1 0 2

解釋:

對於n=3的沒有任何限制的情況

第一:0 1 2

第二:0 2 1

第三:1 0 2

第四:1 2 0

第五:2 0 1

第六:2 1 0

根據題目所給的限制條件由於2不能出現在1後面,0不能出現在2後面

第一:0 2 1

第二:1 0 2

第三:2 1 0

#include 

int n, k, count, key;

int a[10][10], num[10];

void swap(int

x, int

y)void sort(int from, int end)

}swap(i, t);

}}void print()

printf("\n");

}void arrange(int fromindex)

if(count == k)

int i;

for(i=fromindex; isort(fromindex, n);

swap(fromindex, i);

if(fromindex == 0) arrange(fromindex+1);

else

if (a[num[fromindex-1]][num[fromindex]] != 0)

if(key == 0)

}}int main()

}for(i=0; i<10; i++)

count = 0;

key = 1;

arrange(0);

return

0;}

演算法訓練 排列問題

求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。輸入描述 n 10,k 500000 輸入樣例 3 20 1 1 1 0 0 0...

演算法訓練 排列問題

題目鏈結 問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。include include using namespac...

藍橋杯VIP試題 演算法訓練 排列問題

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。資料規模和約...