亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

leecode 解題總結:37 Sudoku Solver

2019-11-10 18:02:41
字體:
來源:轉載
供稿:網友
#include <iostream>#include <stdio.h>#include <vector>#include <fstream>using namespace std;/*問題: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.分析:這是搜索是否有解的問題,廣度優先搜索最優解,深度優先搜索確定是否有解。因此本題應該用深度優先搜索??搭}目,如果擺放新的元素不成功,應該是要回溯的。因此,此題應該是回溯來做。每一次嘗試擺放一個1~9中的某個元素,如果擺放不成功,就用另一個元素替換,如果最終棋盤擺滿了,就輸出結果。如何判定沒有結果,如果1判斷是否滿足可行解,只需要當前board[i][j]元素為c是否在行號,列號,子棋盤擺放過	判斷子棋盤上的9個元素是否與給定元素重復,先確定 子棋盤的行號=行號	給定位置(row,jcol)計算對應子棋盤的行號(x,y)	x = 3 * (row / 3)	y = 3 * (col / 3)	子棋盤編號 = 3 *(row / 3) + col /3 = 3 + 2 = 5,行號確定大的子棋盤編號,列號確定小的子棋盤編號	子棋盤元素下標 = 3 * (col / 3) + col % 3 = 3 * 2 + 8 % 3 = 8,其實就是將列分成3等份,然后取余數	比如給定元素(5,8),對應第6子棋盤中(編號為5)中第8個元素	這里由于采用i為0~8,i默認為列號	則新的子棋盤編號=board[ 3 * (row / 3) + i / 3 ][3 * (col / 3) + i % 3]	subBoardIndex = 3 * (row / 3) + i / 3;	index = 3 * (col / 3) + i % 3;*/class Solution {public:	bool isValidSudoku(vector<vector<char> > &board , int row  , int col , char c)	{		if(board.empty())		{			return false;		}		int size = board.size();		int subBoardIndex;		int index;		for(int i = 0 ; i < 9 ; i++)		{			if(board[i][col] != '.' && board[i][col] == c)			{				return false;			}			if(board[row][i] != '.' && board[row][i] == c)			{				return false;			}			/*			判斷子棋盤上的9個元素是否與給定元素重復,先確定 子棋盤的行號=行號			給定位置(row,jcol)計算對應子棋盤的行號(x,y)			x = 3 * (row / 3)			y = 3 * (col / 3)			子棋盤編號 = 3 *(row / 3) + col /3 = 3 + 2 = 5,行號確定大的子棋盤編號,列號確定小的子棋盤編號			子棋盤元素下標 = 3 * (col / 3) + col % 3 = 3 * 2 + 8 % 3 = 8,其實就是將列分成3等份,然后取余數			比如給定元素(5,8),對應第6子棋盤中(編號為5)中第8個元素			這里由于采用i為0~9,i默認為列號			則新的子棋盤編號=board[ 3 * (row / 3) + i / 3 ][3 * (col / 3) + i % 3]			*/			subBoardIndex = 3 * (row / 3) + i / 3;			index = 3 * (col / 3) + i % 3;			if(board[subBoardIndex][index] != '.' && board[subBoardIndex][index] == c)			{				return false;			}		}		return true;	}	bool isSolved(vector<vector<char>>& board)	{		if(board.empty())		{			return false;		}		int size = board.size();		for(int i = 0 ; i < size ; i++)		{			for(int j = 0 ; j < size ; j++ )			{				if('.' == board.at(i).at(j))				{					//嘗試在空白的區域處擺放下一個元素,這里直接用cha					for(char c = '1' ; c <= '9' ; c++)					{						//如果擺放有效,繼續處理						if(isValidSudoku(board , i , j , c))						{							board.at(i).at(j) = c;							//牛逼,直接用遞歸判斷下一次是否擺放成功							if(isSolved(board))							{								return true;							}							else							{								board.at(i).at(j) = '.';							}						}					}					//如果一直沒有得到結果,說明無效					return false;				}			}		}		return true;	}    void solveSudoku(vector<vector<char>>& board) {		if(board.empty())		{			return;		}		bool isSolve = isSolved(board);		_isSolved = isSolve;	}public:	bool _isSolved;};vector<string> readFile(string& fileName){	vector<string> results;	if(fileName.empty())	{		return results;	}	ifstream file(fileName , ios::in);	if(!file)	{		cout << "can't open file" << endl;		return results;	}	const int maxSize = 1024;	char str[maxSize];	while(!file.eof())	{		file.getline(str , maxSize);		string s(str);		results.push_back(s);	}	file.close();	return results;}void print(vector< vector<char> >& board){	if(board.empty())	{		cout << "no result" << endl;	}	int size = board.size();	for(int i = 0 ; i < size ; i++)	{		for(int j = 0 ; j < size ; j++ )		{			cout << board.at(i).at(j);		}		cout << endl;	}}void process(){	vector< vector<char> > board;	string s;	int size;	Solution solution;	board.clear();	vector<string> strs = readFile(string("data.txt"));	int len = strs.size();	for(int i = 0 ; i < len ; i++)	{		s = strs.at(i);		vector<char> str;		size = s.length();		for(int i = 0 ; i < size ; i++)		{			str.push_back(s.at(i));		}		board.push_back(str);	}	solution.solveSudoku(board);	if(solution._isSolved)	{		print(board);	}	else	{		cout << "no" << endl;	}}int main(int argc , char* argv[]){	process();	getchar();	return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品中文字幕久久臀| 亚洲欧美激情精品一区二区| 自拍偷拍亚洲区| 亚洲a成v人在线观看| 日韩电视剧在线观看免费网站| 91精品久久久久久| 国产69精品久久久久99| 亚洲永久在线观看| 爽爽爽爽爽爽爽成人免费观看| 久久综合国产精品台湾中文娱乐网| 国产91在线播放精品91| www亚洲精品| 欧美激情一区二区三级高清视频| 日本道色综合久久影院| 国产精品久久久久久久久久尿| 精品性高朝久久久久久久| 亚洲最新视频在线| 欧美黑人xxxⅹ高潮交| 欧美性xxxx在线播放| 丝袜美腿精品国产二区| 日韩成人黄色av| 欧美日韩精品二区| 疯狂做受xxxx高潮欧美日本| 不卡在线观看电视剧完整版| 亚洲黄页视频免费观看| 成人午夜激情免费视频| 欧美孕妇毛茸茸xxxx| 伊人久久综合97精品| 国产欧美日韩高清| 久久久久久97| 日韩欧美国产视频| 亚洲免费人成在线视频观看| 91精品国产91久久久久久吃药| 亚洲自拍偷拍色片视频| 欧美日韩国产限制| 91精品视频专区| 欧美激情日韩图片| 国产精品成人在线| 国产第一区电影| 亚洲第一天堂无码专区| 国产91在线播放| 亚洲精品视频免费| 伊人成人开心激情综合网| 色婷婷综合成人av| 欧美另类69精品久久久久9999| 久热精品视频在线免费观看| 欧美疯狂xxxx大交乱88av| 日韩经典中文字幕在线观看| 欧美裸体xxxx| 亚洲欧洲在线看| 欧美日本高清一区| 国产91精品最新在线播放| 色先锋资源久久综合5566| 欧美日韩国产va另类| 成人精品一区二区三区电影黑人| 亚洲mm色国产网站| 日韩av在线免费观看一区| 国产精品中文字幕在线观看| 4k岛国日韩精品**专区| 国产精品露脸av在线| 深夜福利国产精品| 国产日韩欧美日韩大片| 国产成人激情视频| 国产在线999| 欧美精品成人91久久久久久久| 成人一区二区电影| 欧美亚洲激情在线| 好吊成人免视频| 91产国在线观看动作片喷水| 一区二区三区天堂av| 亚洲一区二区三区视频播放| 欧美黑人极品猛少妇色xxxxx| 1769国产精品| 91经典在线视频| 久久久久久欧美| 欧美黑人性生活视频| 97超碰色婷婷| 亚洲精品美女在线| 成人激情视频在线播放| 国产欧美日韩丝袜精品一区| 日韩不卡在线观看| 欧美视频专区一二在线观看| 亚州精品天堂中文字幕| 亚洲欧美日韩在线高清直播| 66m—66摸成人免费视频| 欧美视频在线观看 亚洲欧| 国产一区二区久久精品| 91视频国产一区| 欧美疯狂性受xxxxx另类| 亚洲视频在线观看视频| 91成人在线播放| 欧美成人在线免费| 操91在线视频| 成人欧美一区二区三区黑人| 日韩av手机在线观看| 日韩一区在线视频| 国产精品爱久久久久久久| 国外视频精品毛片| 亚洲乱码一区av黑人高潮| 亚洲第一免费网站| 久久精品男人天堂| 久久久久久久久久国产| 国产脚交av在线一区二区| 51精品国产黑色丝袜高跟鞋| 国产成人97精品免费看片| 久久精视频免费在线久久完整在线看| 中文字幕亚洲欧美一区二区三区| 亚洲电影天堂av| 欧美日韩在线影院| 国产一区二区黑人欧美xxxx| 国产精品成av人在线视午夜片| 日本精品视频在线观看| 神马久久久久久| 成人午夜激情免费视频| 精品精品国产国产自在线| 在线丨暗呦小u女国产精品| 青草青草久热精品视频在线网站| 91精品国产91久久久久福利| 国产免费一区二区三区在线能观看| 日韩精品电影网| 另类视频在线观看| 中文字幕欧美在线| 亚洲自拍偷拍色图| 久久久久久久国产精品| 欧美激情网站在线观看| 国产一区二区丝袜高跟鞋图片| www.日韩免费| 日韩有码在线视频| 国产精品成熟老女人| 欧美韩国理论所午夜片917电影| 欧美日韩另类在线| www.亚洲人.com| 久久影院资源站| 亚洲美女免费精品视频在线观看| 国产一区二区三区在线观看网站| 欧美精品激情blacked18| 日本最新高清不卡中文字幕| 久久成人精品一区二区三区| 日韩精品免费电影| 欧美在线视频观看| 日本精品免费观看| 欧美专区第一页| 国产在线精品一区免费香蕉| 91精品国产高清久久久久久91| 久久全球大尺度高清视频| 欧美国产亚洲视频| 亚洲成色777777在线观看影院| 57pao国产精品一区| 91精品国产高清久久久久久久久| 国产成人精品综合| 久久精品中文字幕一区| 亚洲精品国精品久久99热| 亚洲黄色在线看| 国产精品永久免费视频| 亚洲18私人小影院| 欧美另类老肥妇| 欧美精品电影在线| 日韩欧美一区二区三区久久| 亚洲电影免费在线观看| 欧美午夜性色大片在线观看| 亚洲精品在线观看www| 8x海外华人永久免费日韩内陆视频| 隔壁老王国产在线精品| 亚洲女人天堂av|