[Offer收割]程式設計練習賽1 hihocoder 1268 九宮 (DFS)
時間限制:10000ms
單點時限:1000ms
記憶體限制:256MB
描述
小Hi最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1~9不重複的填入一個3*3的矩陣當中,使得每一行、每一列和每一條對角線的和都是相同的。
三階幻方又被稱作九宮格,在小學奧數裡有一句非常有名的口訣:“二四為肩,六八為足,左三右七,戴九履一,五居其中”,通過這樣的一句口訣就能夠非常完美的構造出一個九宮格來。
有意思的是,所有的三階幻方,都可以通過這樣一個九宮格進行若干映象和旋轉操作之後得到。現在小Hi準備將一個三階幻方(不一定是上圖中的那個)中的一些陣列抹掉,交給鄰居家的小朋友來進行還原,並且希望她能夠判斷出究竟是不是隻有一組解。
而你呢,也被小Hi交付了同樣的任務,但是不同的是,你需要寫一個程式~
輸入
輸入僅包含單組測試資料。
每組測試資料為一個3*3的矩陣,其中為0的部分表示被小Hi抹去的部分。
對於100%的資料,滿足給出的矩陣至少能還原出一組可行的三階幻方。
輸出
如果僅能還原出一組可行的三階幻方,則將其輸出,否則輸出“Too Many”(不包含引號)。
0 7 2
0 5 0
0 3 0
樣例輸出
6 7 2
1 5 9
8 3 4
題目連結:http://hihocoder.com/problemset/problem/1268
題目分析:裸DFS
#include <cstdio>
#include <cstring>
int x[5][5], ans[5][5];
bool has[10];
int cnt, tmp;
bool flag;
bool ok()
{
int sum = x[1][1] + x[1][2] + x[1][3];
if(x[2][1] + x[2][2] + x[2][3] != sum)
return false;
if(x[3][1] + x[3][2] + x[3][3] != sum)
return false;
if(x[1][1] + x[2][1] + x[3][1] != sum)
return false;
if(x[1][2] + x[2][2] + x[3][2] != sum)
return false;
if(x[1][3] + x[2][3] + x[3][3] != sum)
return false;
if(x[1][1] + x[2][2] + x[3][3] != sum)
return false;
if(x[1][3] + x[2][2] + x[3][1] != sum)
return false;
return true;
}
void DFS(int i, int j)
{
if(i == 4 && ok())
{
cnt ++;
if(cnt == 1)
memcpy(ans, x, sizeof(x));
return;
}
if(x[i][j])
{
if(j == 3)
DFS(i + 1, 1);
else
DFS(i, j + 1);
}
else
{
for(int num = 1; num <= 9; num++)
{
if(!has[num])
{
has[num] = true;
x[i][j] = num;
if(j == 3)
DFS(i + 1, 1);
else
DFS(i, j + 1);
has[num] = false;
x[i][j] = 0;
}
}
}
}
int main()
{
cnt = 0;
flag = false;
for(int i = 1; i <= 3; i++)
{
for(int j = 1; j <= 3; j++)
{
scanf("%d", &x[i][j]);
has[x[i][j]] = true;
}
}
DFS(1, 1);
if(cnt == 1)
for(int i = 1; i <= 3; i++)
for(int j = 1; j <= 3; j++)
printf("%d%c", ans[i][j], j == 3 ? '\n' : ' ');
else
printf("Too Many\n");
}
相關文章
- 團體程式設計天梯賽-練習集程式設計
- 團體程式設計天梯賽-練習集 L1-038 新世界程式設計
- 程式設計練習程式設計
- 程式設計實踐(Pandas)綜合練習1程式設計
- 《Python程式設計》第九章部分課後練習題Python程式設計
- Java程式設計練習_241206Java程式設計
- 牛客練習賽27【C 水圖 dfs求最長路】
- C primer plus 第六版 第九章 第九題 程式設計練習答案程式設計
- 團體程式設計天梯賽-練習集 L2-031 深入虎穴 (25分) dfs深搜+bfs廣搜的兩種思路程式設計
- 團體程式設計天梯賽-練習集 L1-050 倒數第N個字串 (15分)程式設計字串
- 《Python程式設計練習與解答》之程式設計概論Python程式設計
- Day40--練習--程式設計2程式設計
- 關於程式設計的基本練習程式設計
- 程式設計師程式設計,你的練習是不是有效的?程式設計師
- Vue學習筆記(九):元件化程式設計Vue筆記元件化程式設計
- 四面美團,收割 offer
- 【牛客訓練記錄】浙江機電職業技術大學第九屆程式設計競賽程式設計
- C程式設計語言(第2版·新版)練習題1-4C程式程式設計
- C程式設計語言(第2版·新版)練習題1-5C程式程式設計
- C程式設計語言(第2版·新版)練習題1-6C程式程式設計
- C程式設計語言(第2版·新版)練習題1-7C程式程式設計
- C程式設計語言(第2版·新版)練習題1-8C程式程式設計
- 序列模型第一週程式設計練習模型程式設計
- 【CCCC】PAT : 團體程式設計天梯賽-練習集 L3 答案(01-23)程式設計
- C primer plus 第六版 第十一章 第九題 程式設計練習答案程式設計
- 2024年第九屆CCCC團體程式設計天梯賽 遊記程式設計
- 2024-2025-1 20241416 《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 2024-2025-1 20241311 《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 2024-2025-1 20241401 《計算機基礎與程式設計》 第九周學習總結計算機程式設計
- 2024-2025-1 20241322 《計算機基礎與程式設計》 第九周學習總結計算機程式設計
- 2024-2025-1 20241328 《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 2024-2025-1 20241413 《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 2024-2025-1 20241312《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 2024-2025-1 20241417 《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 2024-2025-1 20241316 《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 2024-2025-1 20241415 《計算機基礎與程式設計》第九周學習總結計算機程式設計
- 《C程式設計語言》 練習3-5C程式程式設計
- 大一C語言程式設計練習題C語言程式設計
- Java程式設計基礎24——遞迴練習Java程式設計遞迴