本題與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...