poj 2965 遞迴 列舉

2021-06-21 11:08:01 字數 766 閱讀 7772

本題與1753思路一樣,區別就在於要記錄位置。

deep是當前進行到了哪一步,step是判斷用step步是否可以完成,因此記錄位置只需在change()後做,回溯的時候雖然會說明上一步無效,但不用修改記錄,因為下一次記錄會覆蓋它。

#include using namespace std;

bool map[4][4]=;

bool flag=false;

int step;

int res[16][2]=;

//judge whether to an end

bool isover()

} }return true;

}void change(int row,int col)

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

void dfs(int row,int col,int deep)

if(flag || row==4)

change(row,col);

res[deep][0] = row;

res[deep][1] = col;

if(col<3)

else

change(row,col);

if(col<3)

else

}//1:open,0:close

int main()

} }//function

for(step=1;step<=16;step++) }

//result

cout<

列舉演算法思路訓練 poj2965

這道題相比1753有兩個改變 一 從小十字變成了大十字 從改變乙個點的上下左右變成了乙個點的整行整列 這個倒是不難做,執行函式稍微改一下就行 二 題目直接讓你輸出改變的點 這道題是special judge 不過我直接把1753的尋找最小步數的思路拿來了,其實只要找到全部為open的乙個解就行了 思...

poj 2965 解題報告

就是對乙個4x4的棋盤進行翻轉,每一次翻轉都將讓同一行和列一起翻轉,直到所有符號都變為 時成功。通過列舉加上深度優先搜尋的方法進行解決,列舉通過行號和列號順序進行,每個位置都有翻轉和不翻轉兩種選擇 通過乙個位置兩次翻轉來回溯 poj 2965 244k 844ms include using nam...

poj2965解題報告

這道題目的思路和 url 的思路一樣。有所不同的是這道題目中還需要輸出搜尋的路徑,於是在unit中加了乙個pre變數以記錄搜尋的路徑,最後通過遞迴呼叫print detail從前往後輸出寬搜的結果。problem 2965 user godfrey90 memory 1992k time 1000m...