深度优先搜索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;
}
相关推荐
六点_dn5 小时前
Linux学习笔记-printf命令
linux·运维·算法
遥感知识服务6 小时前
Sentinel-1 + DEM + FwDET + 随机森林:从快速水深初估到多因子误差修正
算法·随机森林·sentinel
来一碗刘肉面6 小时前
顺序表与链表的比较
数据结构·算法·链表
alphaTao6 小时前
LeetCode 每日一题 2026/7/13-2026/7/19
算法·leetcode
nnerddboy7 小时前
脑电信号处理实战 03 | 运动想象脑机接口入门:ERD/ERS、CSP 空间滤波与左右拳想象解码
算法·信号处理
持力行7 小时前
C++与Java变量声明、定义及内存分配的核心区别
java·开发语言·c++
QN1幻化引擎8 小时前
Dalin L — 我造了一门支持中文编程的语言,完整移植到 Rust 了
人工智能·算法·机器学习
Rainy Blue8838 小时前
C转C++速成
c语言·c++·算法
txzrxz8 小时前
二分图详解
数据结构·c++·算法·图论·深度优先搜索·二分图染色
jinyishu_8 小时前
C++ 继承全解:从基础到高级特性
开发语言·c++