方塊填數
「數獨」是當下炙手可熱的智力遊戲。一般認為它的起源是「拉丁方塊」,是大數學家尤拉於2023年發明的。
如圖[1.jpg]所示:6x6的小格被分為6個部分(圖中用不同的顏色區分),每個部分含有6個小格(以下也稱為分組)。
開始的時候,某些小格中已經填寫了字母(abcdef之一)。需要在所有剩下的小格中補填字母。
全部填好後,必須滿足如下約束:
1. 所填字母只允許是a,b,c,d,e,f 中的某乙個。
2. 每行的6個小格中,所填寫的字母不能重複。
3. 每列的6個小格中,所填寫的字母不能重複。
4. 每個分組(參見圖中不同顏色表示)包含的6個小格中,所填寫的字母不能重複。
為了表示上的方便,我們用下面的6階方陣來表示圖[1.jpg]對應的分組情況(組號為0~5):
用下面的資料表示其已有字母的填寫情況:
32 很明顯,第一列表示行號,第二列表示列號,第三列表示填寫的字母。行號、列號都從0開始計算。
一種可行的填寫方案(此題剛好答案唯一)為:
ef c b d a
ac e d f b
da b e c f
fb d c a e
bd f a e c
ce a f b d
你的任務是:編寫程式,對一般的拉丁方塊問題求解,如果多解,要求找到所有解。
【輸入、輸出格式要求】
使用者首先輸入6行資料,表示拉丁方塊的分組情況。
接著使用者輸入乙個整數n (n<36), 表示接下來的資料行數
接著輸入n行資料,每行表示乙個預先填寫的字母。
程式則輸出所有可能的解(各個解間的順序不重要)。
每個解占用7行。
即,先輸出乙個整數,表示該解的序號(從1開始),接著輸出乙個6x6的字母方陣,表示該解。
解的字母之間用空格分開。
如果找不到任何滿足條件的解,則輸出「無解」
例如:使用者輸入:
6 02c
03b05a
20d35e
53f則程式輸出:
1 ef c b d a
ac e d f b
da b e c f
fb d c a e
bd f a e c
ce a f b d
再如,使用者輸入:
7 04b
05a13d
14c24e
50c51a
則程式輸出:
1 dc e f b a
ef a d c b
ab f c e d
be d a f c
fd c b a e
ca b e d f
2 dc e f b a
ef a d c b
ad f b e c
be c a f d
fb d c a e
ca b e d f
3 dc f e b a
ae b d c f
fd a c e b
bf e a d c
eb c f a d
ca d b f e
4 dc f e b a
be a d c f
ad c f e b
fb e a d c
ef b c a d
ca d b f e
5 dc f e b a
ef a d c b
ab c f e d
be d a f c
fd b c a e
ca e b d f
6 dc f e b a
ef a d c b
ab d f e c
be c a f d
fd b c a e
ca e b d f
7 dc f e b a
ef a d c b
ad b f e c
be c a f d
fb d c a e
ca e b d f
8 dc f e b a
fe a d c b
ad b c e f
bf e a d c
eb c f a d
ca d b f e
9 dc f e b a
fe a d c b
af c b e d
bd e a f c
eb d c a f
ca b f d e
報了c/c++組,重新用c++寫了一遍,回來改**。。
思路:用乙個6*6的陣列存輸入的顏色值,因為顏色值為0-5,每種顏色有六個格仔,用乙個6*6陣列記錄每個小部分的值(0-5)用於分類,而遞迴到某個點(x,y)時,要知道它屬於哪個小部分,所以用struct配合陣列記錄每個點(x,y)屬於哪個小部分,陣列的第乙個下標就是屬於的小部分(比如[1]=(3,4),座標(3,4)的點屬於第乙個小部分),剩下的就簡單了,類似於數獨問題,深搜就行了
**:
#include #include #include using namespace std;
struct pos;
vectorps[6];//小方塊的座標
int card[6][6],color[6][6],m,num = 1;
void print()
printf("\n");
}}bool check(int x,int y,int v)
return 1;
}void dfs(int x,int y)else
}}else
}}int main(int argc, const char * argv)
}int x,y;
char c;
scanf("%d",&m);
for(int i=0;i
藍橋杯省賽真題 方格填數
如下的10個格仔 如果顯示有問題,也可以參看 圖1.jpg 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。用全排列,然後再判斷每兩個位置之間的數是否滿足...
第四屆藍橋杯(國賽) 填算式
問題描述 請看下面的算式 abcd efgh xy 900 每個字母代表乙個 0 9 的數字,不同字母代表不同數字,首位不能為 0。比如,5012 4987 36 就是乙個解。請找到另乙個解,並提交該解中 abcd 所代表的整數。答案提交 請嚴格按照格式,通過瀏覽器提交答案。注意 只提交 abcd ...
藍橋杯第七屆國賽JAVA真題 七星填數
七星填數 如圖 圖1.png 所示。在七角星的14個節點上填入1 14 的數字,不重複,不遺漏。要求每條直線上的四個數字之和必須相等。圖中已經給出了3個數字。請計算其它位置要填充的數字,答案唯一。填好後,請提交綠色節點的4個數字 從左到右,用空格分開 比如 12 5 4 8 當然,這不是正確的答案。...