我正在制作Sudoku验证程序,该程序检查已解决的数独是否正确,在该程序中,我需要将多个变量进行比较以检查它们是否相等...
无论每个su [] []是否都具有不同的值,我都提供了我尝试过的代码片段。我没有得到预期的结果...
我想确保su [] []中的所有值都不相等。
我该如何实现相同的代码段中的错误?
谢谢...
for(int i=0 ; i<9 ;++i){ //for checking a entire row
if(!(su[i][0]!=su[i][1]!=su[i][2]!=su[i][3]!=su[i][4]!=su[i][5]!=su[i][6]!=su[i][7]!=su[i][8])){
system("cls");
cout<<"SUDOKU'S SOLUTION IS INCORRECT!!";
exit(0);
} }
答案 0 :(得分:0)
要检查每个列的唯一性,您必须将每个元素与列中的其他元素进行比较。
例如:
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 9; ++j) {
for (int k = j + 1; k < 9; ++k) {
if (su[i][j] == su[i][k]) {
system("cls");
cout << "SUDOKU'S SOLUTION IS INCORRECT!!\n";
exit(0);
}
}
}
}
由于每行只有8个元素,因此三次解决方案不会给您带来太多开销。
如果元素数较多,则可以初始化大小为N的数组(其值为0)并横穿该列。对于列中的第i个元素,请向该元素在数组中的位置添加1。然后横向排列。如果某个位置的值不同于1,则表示该列中的值重复。
例如:
for (int i = 0; i < N; ++i) {
int arr[N] = {0};
for (int j = 0; j < N; ++j)
++arr[su[i][j] - 1];
for (int i = 0; i < N; ++i) {
if (arr[i] != 1) {
system("cls");
cout << "SUDOKU'S SOLUTION IS INCORRECT!!\n";
exit(0);
}
}
}
对于高N值,此方法比第一种方法快得多。
上面的代码检查每一列的唯一性,您仍然需要检查每一行。
PS:我还没有测试代码,它可能有错误,但是希望您能理解。