社区讨论
求助:最后两个数据点超时了
P1784数独参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo8it1pz
- 此快照首次捕获于
- 2023/10/27 19:18 2 年前
- 此快照最后确认于
- 2023/10/27 19:18 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
bool isValid(int row,int col,int val,vector<vector<int>>& board)
{
for(int i = 0;i < 9;i++)
{
if(board[row][i] == val)
{
return false;
}
}
for(int j = 0;j < 9;j++)
{
if(board[j][col] == val)
{
return false;
}
}
int startRow = (row / 3) * 3;
int startCol = (col / 3) * 3;
for (int i = startRow;i < startRow + 3;i++)
{
for (int j = startCol;j < startCol + 3;j++)
{
if(board[i][j] == val)
return false;
}
}
return true;
}
bool back(vector<vector<int>>& board)
{
for(int i = 0;i < board.size();i++)
{
for(int j = 0;j < board[0].size();j++)
{
if(board[i][j] != 0)
continue;
for(char k = 1;k <= 9;k++)
{
if(isValid(i,j,k,board))
{
board[i][j] = k;
if(back(board))
return true;
board[i][j] = 0;
}
}
return false;
}
}
return true;
}
void init(vector<vector<int>>& board)
{
for(int i = 0;i < 9;i++)
for(int j = 0;j < 9;j++)
scanf("%d",&board[i][j]);
}
int main()
{
vector<vector<int>> board(9,vector<int>(9));
init(board);
back(board);
for(int i = 0;i < 9;i++)
{
for(int j = 0;j < 9;j++)
printf("%d ",board[i][j]);
printf("\n");
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...