備考藍橋杯(19)方格填數(DFS) java實現

2021-08-17 21:32:00 字數 1371 閱讀 6334

package pers.robert.lanqiaobei07;

/** *

剪郵票如【圖1.jpg】, 有12張連在一起的12生肖的郵票。

現在你要從中剪下5張來,要求必須是連著的。

(僅僅連線乙個角不算相連)

比如,【圖2.jpg】,【圖3.jpg】中,粉紅色所示部分就是合格的剪取。

請你計算,一共有多少種不同的剪取方法。

請填寫表示方案數目的整數。

注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。

* @author robert

* */

public class the07jianyoupiaodemo1_question

} }

} }

} system.out.println(count);

} private static boolean judge()

private static void dfs(boolean visit, int i)

//!visit[j]&&(a[i]==a[j]+4||a[i]==a[j]-4)-->未被訪問並且在上下相鄰的兩個元素

if (!visit[j]&&(a[i]==a[j]+4||a[i]==a[j]-4))

} }

分析:採用深度優先搜尋:df()

函式入口:

dfs(visit,0);

函式體:

private static void dfs(boolean visit, int i)   

//!visit[j]&&(a[i]==a[j]+4||a[i]==a[j]-4)-->未被訪問並且在上下相鄰的兩個元素

if (!visit[j]&&(a[i]==a[j]+4||a[i]==a[j]-4))

}

這裡順便講解一下深度優先收縮:

(1)      dfs(初始節點)

(2)      function dfs(乙個節點)

for (int i = 0; i < len; i++) }}

return false;}

int main()

}結束條件

if (vec[i] == target) return true;
各種各樣的延伸條件:加減乘除

temp.push_back(vec[i] * vec[j]);

if (dfsearch(temp) == true) return true;

temp.pop_back();

藍橋杯 2016 3 方格填數

如下的10個格仔 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?dfs就好 但是,我加了乙個list的優化 更要命的是 這個list是用stl實現的 好吧,其實是我已經懶到手寫鍊錶都不會了 下面普及list的用法 list.erase it 這...

藍橋杯 方格填數

方格填數 如下的10個格仔 如果顯示有問題,也可以參看 圖1.jpg 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。include include in...

方格填數 藍橋杯

如下的10個格仔 如果顯示有問題,也可以參看 圖1.jpg 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。解 可以直接用全排列的方法解決,但是用dfs ...