很暴力的搜尋,還沒有什麼剪枝......
心得:
如果只查詢和修改,用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...