一個搜索的題目,不過肯定是要剪枝的

最簡單的兩個剪枝我想到了

第一個:
首先,第一行已經確定了,那么我們可以把第一列也確定,就按照升序,2,3,4,5……,這樣的話,沒生成這么一個square,我們就可以隨便的去交換除了第一行后面的幾行。

他們的一個全排列就對應著一種組合,所以最后的答案乘以N-1的階乘就可以

第二個:
這個其實是看來的,就是每次只要所搜完N-1行就可以了。因為剩下的一行必然存在一個解。其實這個不難理解的,最后一行的排列順序只跟前面的每一列缺少的那個數有關。

而且也只能取缺少的那個數,所以也就是唯一的。

第三個:
要用到置換群,我沒看懂

盡管之前N次看組合數學里面都說到置換群,但是我還是似懂非懂,問了數學小王子,他也不是非常懂。然后以為這個東西沒用,就忽略了。沒想到還真的有用。