无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C語(yǔ)言數(shù)獨(dú)程序

2023-06-14 08:00 作者:機(jī)器朗讀  | 我要投稿

以下是一個(gè)簡(jiǎn)單的用C語(yǔ)言編寫的數(shù)獨(dú)程序,可以運(yùn)行并玩數(shù)獨(dú)游戲。程序使用遞歸和回溯算法來(lái)解決數(shù)獨(dú)謎題。你可以根據(jù)需要自行修改和擴(kuò)展程序。

#include <stdio.h>

#define SIZE 9

// 打印數(shù)獨(dú)棋盤
void printBoard(int board[SIZE][SIZE]) {
 ? ?printf("-------------------------\n");
 ? ?for (int i = 0; i < SIZE; i++) {
 ? ? ? ?if (i % 3 == 0 && i != 0) {
 ? ? ? ? ? ?printf("|-------|-------|-------|\n");
 ? ? ? ?}
 ? ? ? ?printf("| ");
 ? ? ? ?for (int j = 0; j < SIZE; j++) {
 ? ? ? ? ? ?if (j % 3 == 0 && j != 0) {
 ? ? ? ? ? ? ? ?printf("| ");
 ? ? ? ? ? ?}
 ? ? ? ? ? ?printf("%d ", board[i][j]);
 ? ? ? ?}
 ? ? ? ?printf("|\n");
 ? ?}
 ? ?printf("-------------------------\n");
}

// 檢查在指定位置放置數(shù)字是否合法
int isSafe(int board[SIZE][SIZE], int row, int col, int num) {
 ? ?// 檢查行是否合法
 ? ?for (int i = 0; i < SIZE; i++) {
 ? ? ? ?if (board[row][i] == num) {
 ? ? ? ? ? ?return 0;
 ? ? ? ?}
 ? ?}

 ? ?// 檢查列是否合法
 ? ?for (int i = 0; i < SIZE; i++) {
 ? ? ? ?if (board[i][col] == num) {
 ? ? ? ? ? ?return 0;
 ? ? ? ?}
 ? ?}

 ? ?// 檢查3x3方格是否合法
 ? ?int startRow = row - row % 3;
 ? ?int startCol = col - col % 3;
 ? ?for (int i = 0; i < 3; i++) {
 ? ? ? ?for (int j = 0; j < 3; j++) {
 ? ? ? ? ? ?if (board[i + startRow][j + startCol] == num) {
 ? ? ? ? ? ? ? ?return 0;
 ? ? ? ? ? ?}
 ? ? ? ?}
 ? ?}

 ? ?return 1; // 數(shù)字合法
}

// 查找空白位置
int findEmptyLocation(int board[SIZE][SIZE], int *row, int *col) {
 ? ?for (*row = 0; *row < SIZE; (*row)++) {
 ? ? ? ?for (*col = 0; *col < SIZE; (*col)++) {
 ? ? ? ? ? ?if (board[*row][*col] == 0) {
 ? ? ? ? ? ? ? ?return 1; // 找到空白位置
 ? ? ? ? ? ?}
 ? ? ? ?}
 ? ?}
 ? ?return 0; // 未找到空白位置
}

// 解決數(shù)獨(dú)謎題
int solveSudoku(int board[SIZE][SIZE]) {
 ? ?int row, col;
 ? ?if (!findEmptyLocation(board, &row, &col)) {
 ? ? ? ?return 1; // 數(shù)獨(dú)已經(jīng)解決
 ? ?}

 ? ?// 嘗試填充數(shù)字
 ? ?for (int num = 1; num <= SIZE; num++) {
 ? ? ? ?if (isSafe(board, row, col, num)) {
 ? ? ? ? ? ?board[row][col] = num;

 ? ? ? ? ? ?if (solveSudoku(board)) {
 ? ? ? ? ? ? ? ?return 1; // 數(shù)獨(dú)已經(jīng)解決
 ? ? ? ? ? ?}

 ? ? ? ? ? ?board[row][col] = 0; // 回溯
 ? ? ? ?}
 ? ?}

 ? ?return 0; // 無(wú)解
}

int main() {
 ? ?int board[SIZE][SIZE] = {
 ? ? ? ?{5, 3, 0, 0, 7, 0, 0, 0, 0},
 ? ? ? ?{6, 0, 0, 1, 9, 5, 0, 0, 0},
 ? ? ? ?{0, 9, 8, 0, 0, 0, 0, 6, 0},
 ? ? ? ?{8, 0, 0, 0, 6, 0, 0, 0, 3},
 ? ? ? ?{4, 0, 0, 8, 0, 3, 0, 0, 1},
 ? ? ? ?{7, 0, 0, 0, 2, 0, 0, 0, 6},
 ? ? ? ?{0, 6, 0, 0, 0, 0, 2, 8, 0},
 ? ? ? ?{0, 0, 0, 4, 1, 9, 0, 0, 5},
 ? ? ? ?{0, 0, 0, 0, 8, 0, 0, 7, 9}
 ? ?};

 ? ?printf("數(shù)獨(dú)謎題:\n");
 ? ?printBoard(board);
 ? ?printf("\n");

 ? ?if (solveSudoku(board)) {
 ? ? ? ?printf("解決后的數(shù)獨(dú):\n");
 ? ? ? ?printBoard(board);
 ? ?} else {
 ? ? ? ?printf("無(wú)解。\n");
 ? ?}

 ? ?return 0;
}


C語(yǔ)言數(shù)獨(dú)程序的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
泰宁县| 台北县| 永安市| 柳江县| 连城县| 疏勒县| 枞阳县| 楚雄市| 阿尔山市| 长葛市| 卓资县| 若尔盖县| 张家界市| 太保市| 获嘉县| 天水市| 泊头市| 新巴尔虎右旗| 繁昌县| 临泉县| 方城县| 南宁市| 班戈县| 卢氏县| 辛集市| 东阿县| 普兰店市| 绥宁县| 平山县| 元氏县| 合川市| 神池县| 汕尾市| 清河县| 西安市| 建德市| 申扎县| 丰县| 平乐县| 黔南| 丰城市|