深度优先搜索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;
}
相关推荐
Escalating_xu6 小时前
【C++入门基础(下)】默认参数、函数重载、引用、inline 与 nullptr
android·c++·redis
艾莉丝努力练剑6 小时前
【AI大模型接入SDK】Provider分析与实现
c++·人工智能·学习·面试·大模型·llm
土司大王12 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec12 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z13 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠13 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
黎阳之光13 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
大模型码小白13 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
老当益壮梁奶奶14 小时前
Linux软件编程学习笔记(七):线程分离与线程间通信详解
linux·c语言·c++·笔记·学习
sel_914 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习