時間限制: 1 sec 記憶體限制: 128 mb
提交: 26 解決: 10
[提交] [狀態] [討論版] [命題人:admin]
題目描述
如下的10個格仔
填入0~9的數字。要求:連續的兩個數字不能相鄰。
(左右、上下、對角都算相鄰)
一共有多少種可能的填數方案?
請填寫表示方案數目的整數。
注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。
輸入沒有任何輸入
輸出輸出乙個整數
第一眼看到這個題的想法是用dfs,因為它是要連續搜尋資料樹上的一整個支路,即0-9這十個數字的不同組合,在此同時,題目中也提到了乙個約束條件:「相鄰或對角,數字不可連續」,所以在放每乙個數字之前要設計乙個檢查方案檢查它是否與之前所放的數字有衝突。
#include #include #include #include #include #include #define determination main
#define lldin(a) scanf("%lld",&a)
#define din(a) scanf("%d",&a)
#define reset(a,b) memset(a,b,sizeof(a))
const int inf=0x3f3f3f3f;
using namespace std;
typedef long long ll;
typedef long double ld;
/*although there will be many obstructs ahead of you,
the desire for victory still fills you with determination..*/
int dircetions[4][2]=;
//這四個方向向量都指向第二和第三象限,即之前放過的且與當前數相鄰的數字。
int diagrams[99][99];
bool vis[23];
ll ans=0;
bool check(int r,int c,int current)//判定程式
}return true;
}void dfs(int r,int c)
//空格結束搜尋
if(c>4)
dfs(r+1,1);
//超出當前列的容量,就要搜尋下一行
else}}
}}int determination()
2023年藍橋杯 A組 方格填數(dfs)
題目分析 有兩種思路,一種是從左上角第乙個節點開始,向下面和右面依次遍歷,每次填乙個數,並且判斷是否和四周的數相鄰。還有一種是直接全排列0 9,然後從左到右,從上到下依次填入,之後判斷是否滿足相鄰的格仔數不相鄰的條件,如果滿足則方案數 1.全排列用next permutation函式即可。inclu...
藍橋杯 2016c c A組 方格填數
判斷當前數字是否已經用過 int flag 3 4 用來儲存每個格仔,判斷格仔是否能用 int map 3 4 用來儲存數字的格仔 int ans 記錄數目 void init 初始化 flag 0 0 0 左上角格仔不能訪問 flag 2 3 0 右下角格仔不能訪問 void judge int ...
方格填數(2023年藍橋杯)
如圖,如下的10個格仔,填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。看到這題第乙個想到的方法就是回溯,就很像八皇后,能填進去就填,填不進去就看下乙個位置 我做的是0 9不重複使用 我感覺這題麻煩就在判斷上 1.首先要...