poj 2698:八皇后問題

解題思路:

DFS

#include<iostream>
#include<cstring>
using namespace std;

//地圖 
struct map
{
	int v[10][10];
	int t[10][10];
};
map m;
int no = 1; 

void DFS(int i,int j,map c)
{
	c.v[i][j] = 1;
	//結果 
	if(i==8)
	{
		cout<<"No. "<<no<<endl;
		for(int p=1;p<=8;p++)
		{
			for(int q=1;q<=8;q++)
				cout<<c.v[q][p]<<" ";
			cout<<endl;
		}
		no++;
		return;
	}
	//列 
	for(int q=i;q<=8;q++)
		c.t[q][j] = 1;
	//斜線 
	int q = 1;
	while(i+q<=8 && j+q<=8)
	{
		c.t[i+q][j+q] = 1;		
		q++;
	}
	int p = 1;
	while(i+p<=8 && j-p>=1)
	{
		c.t[i+p][j-p] = 1;
		p++;
	} 
	//遞歸 
	for(int p=1;p<=8;p++)
		if(c.t[i+1][p] == 0)
		{
			map a =c;
			DFS(i+1,p,a);
		}
	return;
}

int main()
{
	memset(m.v,0,sizeof(m.v));
	memset(m.t,0,sizeof(m.t));
	for(int i=1;i<=8;i++)
	{
		map r = m;
		DFS(1,i,r);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章