NYOJ 722 数独

    xiaoxiao2021-12-14  17

    简单的搜索题直接上代码

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> using namespace std; int flag; int arr[9][9]; bool judge(int num, int x, int y)//判断 { int i, j; for(i = 0; i < 9; i++) { if(arr[i][y] == num || arr[x][i] == num) return false; } int a = x / 3 * 3, b = y / 3 * 3; for(i = a; i < a+3; i++) { for(j = b; j < b+3; j++) { if(arr[i][j] == num) return false; } } return true; } void print()//输出 { int i, j; for(i = 0; i < 9; i++) { for(j = 0; j < 9; j++) { cout<<arr[i][j]<<' '; } cout<<endl; } } void dfs(int x, int y)//搜索 { if(flag == 1)//出口 { return ; } if(x==9 && y == 0) { flag = 1; print(); return ; } if( y == 9)//每行搜完之后搜索下一行 dfs(x+1,0); if(arr[x][y]!=0) dfs(x,y+1);//若当前已经填数字,搜下一个。 if(arr[x][y] == 0) { int i; for(i = 1; i <= 9; i++) { if(judge(i, x, y)) { arr[x][y] = i; dfs(x, y+1); arr[x][y] = 0; } } } } int main() { int n; cin>>n; while(n--) { memset(arr,0,sizeof(arr)); flag = 0; int i, j; for(i = 0; i < 9; i++) { for(j = 0; j < 9; j++) { cin>>arr[i][j]; } } dfs(0,0); } }

    转载请注明原文地址: https://ju.6miu.com/read-965439.html

    最新回复(0)