多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > leetcode037:Sudoku Solver

leetcode037:Sudoku Solver

來源:程序員人生   發(fā)布時(shí)間:2015-05-26 07:50:00 閱讀次數(shù):2415次

問題描寫

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character '.'.

You may assume that there will be only one unique solution.


A sudoku puzzle...


...and its solution numbers marked in red.

問題分析

數(shù)獨(dú)解法基本靠暴力求解,在所有無肯定的位置對(duì)所有可能的解進(jìn)行嘗試,直接暴力解運(yùn)行時(shí)間是153ms。所以在此之前先肯定唯1解的位置,唯1解有兩種類型。
  1. 該位置在所在行、列、宮上都滿足的情況下的候選集只有1個(gè);
  2. 該位置在所在行(列、宮)的所有未肯定位置的候選集該值只出現(xiàn)1次。

代碼

//Runtime: 17 ms class Solution { public: bool fun(vector<vector<char> > &board, int i, int j, int size) { for (; i < board.size(); i++){ if (j == board[i].size()) j = 0; for (; j < board[i].size(); j++){ if (board[i][j] == '.'){ int a[10]; int b[10]; int c[10]; //初始化 memset(a, 0, sizeof(int) * 10); memset(b, 0, sizeof(int) * 10); memset(c, 0, sizeof(int) * 10); for (int m = 0; m < board[i].size(); m++){ int k = board[i][m] - '0'; if (k <= 9 && k >= 1){ a[k] = 1; } } for (int m = 0; m < board.size(); m++){ int k = board[m][j] - '0'; if (k <= 9 && k >= 1){ b[k] = 1; } } int s = i / 3 * 3; int t = j / 3 * 3; for (int m = 0; m < 9; m++){ int k = board[s + m / 3][t + m % 3] - '0'; if (k <= 9 && k >= 1){ c[k] = 1; } } for (int k = 1; k <= 9; k++){ if (!a[k] && (!b[k]) && (!c[k])){ board[i][j] = k + '0'; if (j + 1 == board[i].size() && fun(board, i + 1, 0, size)){ return true; } else if (fun(board, i, j + 1, size)){ return true; } board[i][j] = '.'; } } return false; } } } return true; } void solveSudoku(vector<vector<char> > &board) { int a[9][10]; //處理行 int b[9][10]; //處理列 int c[9][10]; //處理單元 //初始化 for (int i = 0; i < 9; i++){ memset(a + i, 0, sizeof(int) * 10); memset(b + i, 0, sizeof(int) * 10); memset(c + i, 0, sizeof(int) * 10); } int m, n; int size = 0; for (int i = 0; i < board.size(); i++){ for (int j = 0; j < board[i].size(); j++){ int k = board[i][j] - '0'; if (k <= 9 && k >= 1){ size++; a[i][k] = 1; b[j][k] = 1; m = i / 3 * 3 + j / 3; c[m][k] = 1; } } } int x = 0; map<int, vector<int> > ma; map<int, vector<int>> mb[9]; map<int, vector<int>> mc[9]; int pre; do{ pre = size; for (int i = 0; i < board.size(); i++){ for (int j = 0; j < board[i].size(); j++){ if (board[i][j] == '.'){ int count = 0; m = i / 3 * 3 + j / 3; for (int k = 1; k <= 9; k++){ if (!a[i][k] && (!b[j][k]) && (!c[m][k])){ ma[k].push_back(j); mb[j][k].push_back(i * 9 + j); mc[m][k].push_back(i * 9 + j); } } } } map<int, vector<int> >::iterator it; for (it = ma.begin(); it != ma.end(); it++){ if (it->second.size() == 1 && board[i][it->second.front()] == '.'){ size++; board[i][it->second.front()] = '0' + it->first; a[i][it->first] = 1; b[it->second.front()][it->first] = 1; m = i / 3 * 3 + it->second.front() / 3; c[m][it->first] = 1; } } ma.clear(); } for (int i = 0; i < 9; i++){ for (auto it : mb[i]){ int x = it.second.front() / 9; int y = it.second.front() % 9; if (it.second.size() == 1 && board[x][y] == '.'){ size++; board[x][y] = '0' + it.first; a[x][it.first] = 1; b[y][it.first] = 1; m = x / 3 * 3 + y / 3; c[m][it.first] = 1; } } mb[i].clear(); for (auto it : mc[i]){ int x = it.second.front() / 9; int y = it.second.front() % 9; if (it.second.size() == 1 && board[x][y] == '.'){ size++; board[x][y] = '0' + it.first; a[x][it.first] = 1; b[y][it.first] = 1; m = x / 3 * 3 + y / 3; c[m][it.first] = 1; } } mc[i].clear(); } //cout << size << endl; //x++; } while (pre < size && size < 81); if (size == 81) return; fun(board, 0, 0, size); } };


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久大 | 亚洲性猛交xx乱 | 亚洲欧美日韩久久一区 | 欧美xxxxhd4k| 国产精品视频福利 | 91在线一区二区三区 | xh98hx国产免费 | 亚洲一区二区三区免费 | 国产区精品福利在线观看精品 | 成人免费a视频 | 亚洲精品视频免费观看 | 人人澡人人擦人人免费 | 亚洲欧美在线视频观看 | 国产在线播放成人免费 | h网站国产 | chinesehd国产刺激对白 | 羞羞影院在线观看 | 国产在线不卡一区 | 久久国内精品视频 | 欧美精品一区二区三区免费观看 | 日韩中文字幕一区二区不卡 | 免费观看无遮挡www的视频 | 日韩中文字幕在线观看视频 | 成年人视频免费网站 | 欧美性高清hd | 一级做性色a爰片久久毛片免费 | 欧美疯狂xxxx乱大交视频 | 高清国产一区二区 | 影院成人区精品一区二区婷婷丽春院影视 | 日本免费在线一区 | www操操| 亚洲fuli在线观看 | 无国产精品白浆免费视 | 欧美色另类 | 久久久久久综合成人精品 | 亚洲欧美小视频 | 亚洲欧洲一区二区三区 | 老司机深夜福利在线 | 日本一区二区在线播放 | 美女一级黄色片 | 国产在线拍国产拍拍偷 |