亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 八皇后(改進)(函數回溯).cpp

?? 人工智能中的八皇后問題
?? CPP
字號:

//////////////////////////////////////////////////////
//采用回溯法求解n皇后問題
//用函數進行回溯
//
//經過適當的優化后可以算到32
//
//完成于2007.7.15
//
///////////////////////////////////////////////////////
#include <iostream>

#include <vector>

#include <algorithm>

#include <math.h>
#include <windows.h>
using namespace std;

typedef vector<int> stack;

int backnum = 0;

void PrintMatrix(int **matrix,int n)
{
	int i = 0,j = 0;
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < n; j++)
		{
			if(matrix[i][j] == 1)
			{
				cout<<"*"<<' ';
			}
			else if(matrix[i][j] == 0)
			{
				cout<<"#"<<' ';
			}
			else
			{
				cout<<'a'<<' ';
			}
		}
		cout<<endl;
	}

}

bool CheckMatrix(int **matrix,int i,int j,int n)
{
	int able = 0;
	int lie = 0;
	matrix[i][j] = 1;
	//做合法性檢查
	//不在同一列
	for(lie = i; lie >= 0; lie--)
	{
		if(matrix[lie][j] == 1)
		{
			able++;
		}
	}
	//不在正對角線上
	int num = 0;
	if(i > j)
	{
		num = j;
	}
	else
	{
		num = i;
	}

	for(lie = 0;lie <= num; lie++)
	{
		if(matrix[i-lie][j-lie] == 1)
		{
			able++;
		}
	}
	//不在反對角線上
	if(i > n-1-j)
	{
		num = n-1-j;
	}
	else
	{
		num = i;
	}
	for(lie = 0;lie <= num; lie++)
	{
		if(matrix[i-lie][j+lie] == 1)
		{
			able++;
		}
	}
	if(able == 3)
	{
		return true;
	}
	else
	{
		matrix[i][j] = 0;
		return false;
	}

}

int ChangeMatrix(int **matrix,int i,int j,int n,int value)
{
	int able = 0;
	int lie = 0;
	int origin = matrix[i][j];
	//做合法性檢查
	//同一列
	int Change = 0;
	for(lie = i; lie < n; lie++)
	{
		if(matrix[lie][j] != value)
		{
			matrix[lie][j] = value;
			Change++;
		}
	}
	//正對角線上
	int num = 0;
	if(i > j)
	{
		num = n-1-i;
	}
	else
	{
		num = n-1-j;
	}

	for(lie = 0;lie <= num; lie++)
	{
		if(matrix[i+lie][j+lie] != value)
		{
			matrix[i+lie][j+lie] = value;
			Change++;
		}
		
	}
	//反對角線上
	if(j > n-1-i)
	{
		num = n-1-i;
	}
	else
	{
		num = j;
	}
	for(lie = 0;lie <= num; lie++)
	{
		if(matrix[i+lie][j-lie] != value)
		{
			matrix[i+lie][j-lie] = value;
			Change++;
		}
	
	}
	
	matrix[i][j] = origin;
	return Change;
}

void ChangeMatrix(int **matrix,int n)
{
	int i = 0,j = 0;
	for(i = 0;i < n; i++)
	{
		for(j = 0;j < n; j++)
		{
			if(matrix[i][j] == 2)
			{
				matrix[i][j] = 0;
			}
		}
	}
	for(i = 0;i < n; i++)
	{
		for(j = 0;j < n; j++)
		{
			if(matrix[i][j] == 1)
			{
				ChangeMatrix(matrix,i,j,n,2);
			}
		}
	}

}



void Queen(int **matrix,int i,int j,int n)
{
	backnum++;
	int able = 0;
	int lie = 0,hang = 0;
	int pos = 0;
	if(i == 0 && j == 0)
	{
		matrix[i][j] = 1;
		//ChangeMatrix(matrix,n);
		ChangeMatrix(matrix,i,j,n,2);
		Queen(matrix,i+1,2,n);//下一行
		return;
	}
	else if(j > n -1) //一行找到頭了,回退
	{
		/*
		cout<<"i = "<<i<<endl;
		cout<<"j = "<<j<<endl;
		cout<<"backnum = "<<backnum<<endl;
		PrintMatrix(matrix,n);
		//*/
		///*
		
		int num = 0;
		for(lie = 0; lie < n; lie++)
		{
			if(matrix[i-1][lie] == 1)
			{
				matrix[i-1][lie] = 0;
				pos = lie;
			//	break;
			}
		}
		/*
		for(lie = 0; lie < n; lie++)
		{
			num += matrix[i][lie];
		}
		if(num == 2*(n-1))
		{
			cin>>lie;
			Queen(matrix,i,0,n);ChangeMatrix(matrix,n);//不回退從這一行的起始位置開始
			return;
		}
		//*/
		//*/
		//ChangeMatrix(matrix,i-1,pos,n,0);
		//matrix[i-1][pos] = 0;
		ChangeMatrix(matrix,n);
		
	
		Queen(matrix,i-1,pos+1,n);//從上一行的下一個位置開始
		return;
	}
	else if(i == n-1 && j > n -1)
	{
		cout<<"無解------"<<endl;
		return;
	}
	else 
	{
		if(matrix[i][j] == 0 &&CheckMatrix(matrix,i,j,n))//可以放做下一行
		//if(CheckMatrix(matrix,i,j,n))
		{
			//ChangeMatrix(matrix,i,j,n,2);
			ChangeMatrix(matrix,n);
			/*
			cout<<"i = "<<i<<endl;
			cout<<"j = "<<j<<endl;
			cout<<"backnum = "<<backnum<<endl;
			PrintMatrix(matrix,n);
			//*/
			if(i == n-1)
			{
				cout<<"找到解了--------"<<endl;
				PrintMatrix(matrix,n);
				return;
			}
			else
			{
				for(lie = 0;lie < n; lie++)
				{
					if(matrix[i+1][lie]==0)
						break;
				}
				Queen(matrix,i+1,lie,n);
				/*
				
				if(j+2 < n&& i < n)
				{

					if(j+2>lie)
					{
					Queen(matrix,i+1,j+2,n);
					}
					else
					{
						Queen(matrix,i+1,lie,n);
					}
				}
				else
				//*/
				{
					//Queen(matrix,i+1,0,n);
				}
				return;
			}
		}
		else//不可以做,做這一行的下一個元素
		{
			Queen(matrix,i,j+1,n);
			
			return;
		}
		
	}

}

int first = 0;
int next = 0;
int Select(int **matrix,int i,int n)
{
	int lie = 0;
	int num = n;
	int CM = 0;
	//找出改變次數最少的那個值
	for(int j = 0;j < n; j++)
	{
		if(matrix[i][j]==0)
		{
			CM = ChangeMatrix(matrix,i,j,n,2);
			if(num > CM)
			{
				num = CM;
				lie = j;
			}
			ChangeMatrix(matrix,n);
		}
	}
	return lie;
}
void Queen1(int **matrix,int i,int j,int n)
{
	backnum++;
	int able = 0;
	int lie = 0,hang = 0;
	int pos = 0;
	if(i == 0 && j == 0)
	{
		matrix[i][j] = 1;
		//ChangeMatrix(matrix,n);
		ChangeMatrix(matrix,i,j,n,2);
		Queen1(matrix,i+1,2,n);//下一行
		return;
	}
	else if(j > n -1) //一行找到頭了,回退
	{
		/*
		cout<<"i = "<<i<<endl;
		cout<<"j = "<<j<<endl;
		cout<<"backnum = "<<backnum<<endl;
		PrintMatrix(matrix,n);
		//*/
		///*
		
		int num = 0;
		for(lie = 0; lie < n; lie++)
		{
			if(matrix[i-1][lie] == 1)
			{
				matrix[i-1][lie] = 0;
				pos = lie;
			//	break;
			}
		}
		/*
		for(lie = 0; lie < n; lie++)
		{
			num += matrix[i][lie];
		}
		if(num == 2*(n-1))
		{
			cin>>lie;
			Queen(matrix,i,0,n);ChangeMatrix(matrix,n);//不回退從這一行的起始位置開始
			return;
		}
		//*/
		//*/
		//ChangeMatrix(matrix,i-1,pos,n,0);
		//matrix[i-1][pos] = 0;
		ChangeMatrix(matrix,n);
		
	
		Queen1(matrix,i-1,pos+1,n);//從上一行的下一個位置開始
		return;
	}
	else if(i == n-1 && j > n -1)
	{
		cout<<"無解------"<<endl;
		return;
	}
	else 
	{
		if(matrix[i][j] == 0 &&CheckMatrix(matrix,i,j,n))//可以放做下一行
		//if(CheckMatrix(matrix,i,j,n))
		{
			//ChangeMatrix(matrix,i,j,n,2);
			ChangeMatrix(matrix,n);
			/*
			cin>>first;
			cout<<"i = "<<i<<endl;
			cout<<"j = "<<j<<endl;
			cout<<"backnum = "<<backnum<<endl;
			PrintMatrix(matrix,n);
			//*/
			if(i == n-1)
			{
				cout<<"找到解了--------"<<endl;
				PrintMatrix(matrix,n);
				return;
			}
			else
			{
				int sum = 0;
				for(hang = i+1; hang < n; hang++)
				{
					sum = 0;
					for(lie = 0; lie < n; lie++)
					{
						sum+=matrix[hang][lie];
					}
					if(n*2 == sum)
					{
						for(lie = j+1;lie < n; lie++)
						{
							if(matrix[i][lie]==0)
							break;
						}
						matrix[i][j] = 0;
						ChangeMatrix(matrix,n);
						Queen1(matrix,i,lie,n);
						return;
					}
				}
				//////////////////////////////////
				//可以算到32
				///*
				if(i < n/2-1)
				{
				//*	
				if(j == 0)
					{
						Queen1(matrix,i+1,j,n);
					}
					else if(j+2 < n)
					{
						Queen1(matrix,i+1,j+2,n);
					}
					else
					{
						//Queen1(matrix,i+1,0,n);
						Queen1(matrix,i+1,(j+2)%n,n);
						//Queen1(matrix,i+1,(j+2)%(n-1),n);
					}
					//*/
					return;
				}
				else
				{
					lie = Select(matrix,i+1,n);
					Queen1(matrix,i+1,lie,n);
					return;
				}
				return;
			}
		}
		else//不可以做,做這一行的下一個元素
		{
			for(lie = j+1;lie < n; lie++)
				{
					if(matrix[i][lie]==0)
						break;
				}
			Queen1(matrix,i,lie,n);
			
			return;
		}
		
	}

}

void main()

{
	cout<<"八皇后問題:"<<endl;
	int n = 0;
	do
	{
	cout << "請輸入皇后的個數:" ;
	cin >> n;
	int **matrix;
	matrix = new int*[n];
	int i = 0 , j = 0;
	for(i = 0; i < n; i++)
	{
		matrix[i] = new int[n];
		for(j = 0; j < n; j++)
		{
			matrix[i][j] = 0;
		}
		
	}
	//PrintMatrix(matrix,n);
	//*
	first = n/2;
	next = n/2;
	if(n%2 == 0)
	{
		Queen1(matrix,0,n/2,n);
	}
	else
	{
		Queen1(matrix,0,n/2,n);
	}
	//*/
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < n; j++)
		{
			if(matrix[i][j] == 1)
			{
				cout<<j<<' ';
			}
		}
	}
	cout<<endl;
	cout<<"backnum = "<<backnum<<endl;
	backnum = 0;
	}while(n >= 4);
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区成人久久免费影院| 久久精品夜色噜噜亚洲a∨| 亚洲三级电影全部在线观看高清| 不卡的电影网站| ...中文天堂在线一区| 色婷婷av一区二区三区gif | 亚洲电影激情视频网站| 欧美久久久久久久久久| 免费成人在线网站| 国产午夜精品在线观看| 97久久超碰国产精品电影| 亚洲图片一区二区| 在线电影国产精品| 国产成人在线影院| 亚洲午夜电影在线| wwwwww.欧美系列| 色94色欧美sute亚洲线路一久 | 国产精品高潮呻吟久久| 欧美在线短视频| 九色|91porny| 一二三区精品视频| 日韩视频免费直播| 91亚洲精品久久久蜜桃| 另类的小说在线视频另类成人小视频在线| 久久久久国产精品麻豆ai换脸 | 色综合色综合色综合| 免费xxxx性欧美18vr| 国产精品久久毛片av大全日韩| 在线观看日韩毛片| 国产东北露脸精品视频| 亚洲一区二区三区美女| 久久久久久久久久久久久久久99| 欧美日韩精品综合在线| 成人精品电影在线观看| 国内久久婷婷综合| 日韩高清不卡一区| 亚洲综合在线视频| 中文字幕在线观看一区二区| 精品国产乱码久久久久久闺蜜| 在线精品视频免费播放| 国产.精品.日韩.另类.中文.在线.播放 | 91麻豆免费看片| 成人免费毛片app| 国内精品在线播放| 久久国产夜色精品鲁鲁99| 日本免费新一区视频| 亚洲成人第一页| 一区二区三区在线观看国产| 国产精品国产三级国产专播品爱网| 精品福利一二区| 久久亚洲二区三区| 精品美女一区二区| 精品久久一区二区三区| 精品久久久久久亚洲综合网| 精品国产乱码久久久久久免费| 欧美成人vps| 久久精品亚洲国产奇米99| 国产亚洲一区二区三区在线观看| 精品国产免费一区二区三区四区 | 91精品国产欧美一区二区| 欧美日韩免费一区二区三区视频| 欧美亚洲动漫制服丝袜| 这里只有精品电影| 欧美变态tickling挠脚心| 26uuu国产一区二区三区| 久久久三级国产网站| 国产精品欧美一级免费| 亚洲欧美视频在线观看视频| 一区2区3区在线看| 久久99久久久欧美国产| 国产伦精品一区二区三区在线观看| 国产91在线看| 欧美视频一区在线| 亚洲综合一区二区三区| 免费成人结看片| 成人美女视频在线观看18| 日本福利一区二区| 日韩三级伦理片妻子的秘密按摩| 久久欧美中文字幕| 亚洲第一搞黄网站| 国产一区 二区 三区一级| 91精彩视频在线| 久久综合色鬼综合色| 亚洲免费色视频| 激情偷乱视频一区二区三区| 91麻豆国产在线观看| 欧美日韩精品是欧美日韩精品| 国产日本欧洲亚洲| 日韩精品免费专区| 91影视在线播放| 丝袜美腿亚洲色图| 久久久一区二区| 欧美在线free| 粉嫩av一区二区三区| 99久久综合99久久综合网站| 欧美一级生活片| 国产激情精品久久久第一区二区 | 欧美精品 国产精品| 激情小说欧美图片| 一区二区三区免费看视频| 欧美一区二区三区免费视频| 成人免费毛片嘿嘿连载视频| 亚洲小说春色综合另类电影| 久久久精品欧美丰满| 在线视频国内一区二区| 国产一区二区精品久久99| 一级中文字幕一区二区| 国产精品午夜春色av| 日韩一区二区在线看片| 国产成人自拍高清视频在线免费播放| 亚洲影院理伦片| 国产精品久久久久久久久图文区| 久久久99精品久久| 91精品国产欧美一区二区18| 欧美无砖砖区免费| 日本韩国欧美三级| av男人天堂一区| 国产成人在线网站| 国产精品夜夜嗨| 久久99日本精品| 韩国av一区二区三区| 麻豆精品在线看| 精品在线播放免费| 久久国产精品72免费观看| 日韩国产一二三区| 男女激情视频一区| 久久99精品久久久久久久久久久久| 一区二区三区免费观看| 亚洲一区二区精品久久av| 亚洲国产日韩精品| 视频一区在线视频| 久久福利视频一区二区| 国产在线播放一区| 波多野结衣中文一区| 91免费观看视频| 欧美精品免费视频| 日韩女优av电影| 欧美激情中文不卡| 亚洲一区二区三区四区五区中文| 亚洲与欧洲av电影| 久久www免费人成看片高清| 国内精品免费**视频| 成人免费视频免费观看| 欧美在线不卡视频| 欧美精品一区二区三区蜜桃视频| 国产日韩欧美不卡在线| 一区二区在线观看av| 精彩视频一区二区| 色综合久久综合中文综合网| 欧美一二三在线| 国产精品乱子久久久久| 五月天久久比比资源色| 成人一级黄色片| 日韩午夜中文字幕| 亚洲色图视频网| 色噜噜偷拍精品综合在线| 日韩欧美视频在线| 一区二区三区精品在线观看| 国产精品66部| 日韩欧美国产wwwww| 亚洲与欧洲av电影| 91亚洲资源网| 中文无字幕一区二区三区| 欧美a级理论片| 欧美日韩在线三级| 亚洲一区二区在线播放相泽| 粉嫩一区二区三区性色av| 欧美成人精品高清在线播放| 亚洲电影激情视频网站| 欧美制服丝袜第一页| 国产精品看片你懂得 | 狠狠色狠狠色综合系列| 欧美日本高清视频在线观看| 亚洲综合一区二区| 久久精品国产精品青草| 国产suv精品一区二区6| 精品免费国产一区二区三区四区| 亚洲国产sm捆绑调教视频 | 国产激情精品久久久第一区二区| 欧美一级日韩不卡播放免费| 天天操天天综合网| 欧美一级淫片007| 黑人巨大精品欧美一区| 精品日本一线二线三线不卡| 久久99国产精品久久99| 欧美成人vr18sexvr| 国产精品99久久久久久似苏梦涵 | 91精品在线观看入口| 日本aⅴ精品一区二区三区 | 亚洲国产成人自拍| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 91麻豆精品国产自产在线观看一区 | 夜夜亚洲天天久久| 91精品国产乱码久久蜜臀| 国内精品不卡在线| 亚洲精品视频免费观看| 91麻豆精品91久久久久同性| 丰满亚洲少妇av| 日韩精品乱码av一区二区| 精品国产一区二区三区久久久蜜月|