回溯法 解決堡壘問題

2021-07-01 21:38:20 字數 1426 閱讀 5769

描述:

城堡是乙個4×4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都會把對方打掉。問對於給定的一種狀態,最多能夠修建幾個堡壘。

輸入:

每個測例以乙個整數n(1<=n<=4)開始,表示城堡的大小。接下來是n行字元每行n個,『x』表示該位置是牆,『.』表示該位置是空格。n等於0標誌輸入結束。

輸出:

每個測例在單獨的一行輸出乙個整數:最多修建堡壘的個數。

輸入樣例:

4 .x..

…. xx..

…. 2

xx .x

3 .x.

x.x

.x.

3 …

.xx

.xx

4 ….

…. ….

…. 0

輸出樣例:

5 1

5 2

4**如下:

#include 

using

namespace

std;

int curnum = 0;

int max = 0;

char a[10000][10000] = ;

void search(int i, int n);

bool iscanput(int x, int y, int n);

int main()

}search(0, n);

test[j++] = max;

max = 0;

curnum = 0;

}else

}for (int i = 0; i < j; i++) }/*

回溯法查詢

*/void search(int i, int n)

}else

search(i + 1, n);

}}/*

剪枝條件

*/bool iscanput(int x, int y, int n)

while (y >= 0 && a[r][y] == '.')

if (y < 0 || (y >= 0 && a[r][y] == 'x'))

if (x < 0 || (x >= 0 && a[x][c] == 'x'))

}return

false;}/*

4.x..

....

xx..

....2xx

.x3.x.x.x

.x.3

....xx

.xx4

....

....

....

....

0*/

回溯法 堡壘問題

描述 城堡是乙個4 4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都會把對方打掉。問對於給定的一種狀態,最多能夠修建幾個堡壘。輸入 每...

演算法實驗二 回溯法 堡壘問題

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述城堡是乙個4 4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都...

回溯法解決馬步遍歷問題

設計一演算法,求解西洋棋中的馬的周遊問題 給定一8 8的棋盤,馬從棋盤的某個位置出發,經過棋盤中的每乙個方格恰好一次。只需求一可行解 一 演算法思想描述 指定乙個起點座標,從起點開始對每個點遍歷其能到達的八方向上的點,如果可以踩則走到該結點上,並繼續深入遍歷,直到最後走完所有的結點。二 完整的程式以...