深度优先搜索DFS3(c++)

题目

八皇后问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int n;
int a[10][10];
int cnt;

void dfs(int,int);
void print();
bool panduan(int,int);

int main()
{
	
	n = 8;
	for(int i = 1;i<=n;i++)
	{
		a[1][i] = 1;
		dfs(1,i);
		a[1][i] = 0;
	}
	
	
	return 0;
}
void dfs(int x,int y)
{
	if(x==8)
	{
		print();
		return;
	}
	int tx = x+1;
	int ty = 1;
	for(ty = 1;ty<=n;ty++)
	{
		if(panduan(tx,ty)==true)
		{
			a[tx][ty] = 1;
			dfs(tx,ty);
			a[tx][ty] = 0;
		}
	}
	return;
}
void print()
{
	cnt++;
	cout<<"No."<<cnt<<endl;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=n;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
}
bool panduan(int x,int y)
{
	for(int i = 1;i<=n;i++)
	{
		if(a[i][y]==1&&i!=x) return false;
	}
	int i = x-1,j = y-1;
	while(i>=1&&j>=1)
	{
		if(a[i][j]==1) return false;
		i--;
		j--;
	}
	i = x+1,j = y+1;
	while(i<=n&&j<=n)
	{
		if(a[i][j]==1) return false;
		i++;
		j++;
	}
	i = x+1,j = y-1;
	while(i<=n&&j>=1)
	{
		if(a[i][j]==1) return false;
		i++;
		j--;
	}
	i = x-1,j = y+1;
	while(i>=1&&j<=n)
	{
		if(a[i][j]==1) return false;
		i--;
		j++;
	}
	
	return true;
}

棋盘问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,y;
	node(){};
	node(int aaaaa,int bbbbb)
	{
		x = aaaaa;
		y = bbbbb;
	}
};

int n,k;
char a[10][10];
node b[1010];
int lb;
int cnt;


void dfs(int,int);
bool xuan(int,int);

int main()
{
	
	cin>>n>>k;
	while(n!=-1&&k!=-1)
	{
		for(int i = 1;i<=n;i++)
		{
			for(int j = 1;j<=n;j++)
			{
				cin>>a[i][j];
				if(a[i][j]=='#') b[++lb] = {i,j};
			}
		}
		cnt = 0;
		
		dfs(0,0);
		cout<<cnt<<endl;
		cin>>n>>k;
	}
	
	
	
	
	return 0;
}
void dfs(int v,int vb)
{
	
	if(v==k)
	{
		cnt++;
		return;
	}
	if(vb>=lb) return;
	
	vb++;
	dfs(v,vb);
	if(xuan(b[vb].x,b[vb].y)==true)
	{
		a[b[vb].x][b[vb].y] = '@';
		dfs(v+1,vb);
		a[b[vb].x][b[vb].y] = '#';
	}
	
	
	return;
}
bool xuan(int xx,int yy)
{
	
	for(int i = 1;i<=n;i++)
	{
		if(a[i][yy]=='@'||a[xx][i]=='@') return false;
	}
	
	return true;
}
相关推荐
To_OC4 小时前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵8 小时前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC10 小时前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
郝学胜_神的一滴15 小时前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
To_OC1 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
05Kevin2 天前
lk每日冒险题--数据结构6.27
算法
To_OC2 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安2 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法