刷題 搜尋 新數獨

2022-08-13 21:03:14 字數 1143 閱讀 3650

很暴力的搜尋,還沒有什麼剪枝......

心得:

如果只查詢和修改,用bool比bitset快

rnt在迴圈中會比int快

減少簡單的函式呼叫

#include#include

#include

#include

#define rnt register int

using

namespace

std;

int ans[10][10

];char mp[2][10][10];//

0表示左右,1表示上下

bool fx[10][10],fy[10][10],fbl[10][10

];void dfs(int x,int y,int bl)//

行,列,方格號

//真實座標

int tx=(bl-1)/3*3 +x;

int ty=(bl-1)%3*3 +y;

int mn=0,mx=10

;

if(y>1

)

if(mp[0][tx][ty]=='

>

') mx=min(mx,ans[tx][ty-1

]);

else mn=max(mn,ans[tx][ty-1

]);

if(x>1

)

if(mp[1][tx][ty]=='

v') mx=min(mx,ans[tx-1

][ty]);

else mn=max(mn,ans[tx-1

][ty]);

//可選範圍

int nxx=x,nxy=y+1,nxbl=bl;

if(nxy>3) nxy=1,nxx++;

if(nxx>3) nxx=1,nxbl++;

for(rnt nm=mn+1;nm)

}int

main()

dfs(

1,1,1

);

return0;

}

每日刷題 有效的數獨

判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已填入的數字是否有效即可。示例 例 1 輸入 5 3 7 6 1 9 5 9 8 6 8 6 3 4 8 3 1 7 2 6 6 2 8 4 1 9 5 8 7 9 輸出 true 例 2 輸入 8 3 7 6 1 9 5 9 8 6 8 6...

LeetCode刷題筆記 37 數獨問題

leetcode原題位址 乙個數獨的解法需遵循如下規則 數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。空白格用 表示。輸入 輸出 解數獨本質上就是填入乙個數字,判斷是否滿足條件,不行就換下乙個數字。這就很像回溯...

leetcode刷題(陣列)14 有效的數獨

判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 表示。c...