八皇后问题 思路
先聲明我們根據條件可以知道皇后肯定是每行都有且只有一個所以我們創建一個數組x[t]讓數組角標表示八皇后的行,用這個角標對應的數組值來確定這個皇后在這行的那一列。
我們用遞歸來做:
這問題要求皇后所在的位置必須和其他皇后的位置不在同一行、列還有 把兩個皇后看成點其|斜率|=1
所以我們就要寫這個限定條件用一個函數來實現:函數內對沒一個已經放好的皇后的位置進行判斷,所以就要有個循環。
我們既然是用遞歸來解決問題那就要把這個問題分成一個個相同的小問題來實現對吧!
這小問題是什么呢,不難發現我們要在8*8的方格里放好8個皇后那我們就要知道在8(列)*7(行)是怎么放的在有我們事先寫好的判斷函數放好最后行就搞定了;以此類推我們要知道8*7的怎么方的我們就要知道8*6是怎么樣的就好了。。。。。。
所以我們是以一行怎么放作為一個單元
那好我們就去建一個可以放好一行的函數backtrack(int t)里面的t表示是第幾行,在main函數調用的時候第一次傳進來的是0也就是從第一行開始判斷。
我們就開始寫函數體了:
?????? 沒一行有8個位置可以放每一個位置我們都要去判斷一下所以我們就用循環來搞定。
?????? 在這個循環里面我們讓x[t]=i也就是從這一行的第一個開始判斷。放好后就要去判斷
?????? 是否符合條件。如果符合條件我們就在調用這個函數本身backtrack不過穿進去的參數
?????? 是t+1也就是下一行的意思。
在進行判斷下一行之前我們要判斷一下t是不是等于8也就是已經是最后一行了,如果是最后一行了我們就可以將其進行輸出。打印8*8的矩陣(提示在寫一個函數)皇后的位置用1表示出來沒有的用0表示。
這是我自己的體會,里面可能有寫表述不當的地方要是不懂可以來問我!(第一次回答這么長的問題)
轉載于:https://www.cnblogs.com/jack204/archive/2011/10/18/2215987.html
總結
- 上一篇: poj-2752 Seek the Na
- 下一篇: PyTorch【torchvision】