【发布时间】:2014-03-18 11:47:25
【问题描述】:
对于我的计算机课,我的老师希望我们使用递归或回溯来创建和解决 nXn 大小的数独难题。拼图必须是动态分配的,拼图的唯一规则是任何行或列都不能重复。对角线和较小的子正方形可以有重复。这是我到目前为止所写的内容。
#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
void fill_puzzle(int **array, int size);
void delete_puzzle(int array, int size);
bool check_filled(int **array, int size);
bool check_correct(int **array, int size){
int temp=0;
for(int i=0; i<size; i++){
for (int j=0; j<size; j++){
for (int k=0;k<size;k++){
if (array[i][k]==array[i][j])
return false;
else
return true;
}
}
}
}
void fill_puzzle(int **array, int size){
srand(time(NULL));
int random_number;
random_number=(rand()%size);
while(check_correct(array,size)==false)
for(int i=0; i<size; i++){
for (int j=0; j<size; j++){
array[i][j]=random_number;
if (check_correct(array, size) ==false)
fill_puzzle(array, size);
else
cout << array[i][j];
}
}
}
void delete_puzzle(int **array, int size){
for (int i=0; i<size; i++){
delete [] array[i];
}
delete []array;
}
int main(){
int size=0;
int **array;
cout << "Hello, what size puzzle would you like to create? Please type 1 number. Example: 3 would make a 3x3 sudoku puzzle."<<endl;
cin >> size;
if (size <= 0){
cout << "The size you have chosen will not work, please choose a number greater than 0." << endl;
cin >> size;
for (int i=0; i<size; i++){
array=new int*[size];
array[size]=new int [size];
}
}
else {
for (int i=0; i<size; i++){
array=new int*[size];
array[size]=new int [size];
}
fill_puzzle(array,size);
delete_puzzle(array, size);
}
return 0;
}
当我尝试编译时,我得到一个分段错误,并且使用 GDB 它说错误发生在 if (array[i][k]==array[i][j]) 行的 check_correct 中。提前致谢。
【问题讨论】:
-
编译不会给你一个分段错误,你正在运行它。
-
是的,我就是这个意思
标签: c++ recursion sudoku backtracking