小火山 zzuli 1908 (围棋)

本文介绍了一道关于围棋的算法题目,通过深度优先搜索(DFS)来判断棋盘上的空白位置是否被棋子包围,并将被完全包围的位置变为棋子。文章提供了完整的C++代码实现。

小火山的围棋梦想

 

Description

  小火山最近喜欢上了围棋。
  对于围棋,其实小火山是一窍不通的。现在棋盘上,有很多小火山的棋子。 如果棋盘上有这样的一个位置, 那么这个位置也会变成小火山
的棋子;这样的位置是指小火山的棋子将该位置围起来。
  现在,小火山想知道实际棋盘是什么样子的。 你快来帮帮他吧!

Input

输入第一行是一个整数T(T <= 30), 表示一共有T组数据。
每组数据,第一行为两个整数n, m(1 <= n, m <= 25),  随后一个n*m的矩阵代表棋盘,其中"."是代表没放棋子的位置, "*"代表小火山的棋子。

Output

对于每组数据输出一个n*m的棋盘, 代表实际的棋盘。

Sample Input

2
3 3
***
*.*
***
4 4
.*..
*.*.
*.*.
.*..

Sample Output

Case 1:
***
***
***
Case 2:
.*..
***.
***.
.*..

题解:dfs,没想到怎么判断棋子是否被围住,其实只要dfs看它能否走到边界就行,走不到边界肯定是被围住了,第一次dfs判断是否被围住,第二次dfs将该棋子变成 ' * ' .

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

int t,n,m;
bool flag;
bool vis[40][40];
char map[40][40];

int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};

void dfs1(int a,int b){
	int i; //i不能定义在主函数外 
	if (!flag) return ;
	for (i=0;i<4;i++){
		int tx=a+dx[i];
		int ty=b+dy[i];
		if (map[tx][ty]=='*'||vis[tx][ty]) continue;
		if (tx<=0 || ty<=0 ||tx>=n-1||ty>=m-1){//边界
			flag=false;
			return ;
		}
		vis[tx][ty]=true;
		dfs1(tx,ty);
		if (!flag) return ;
	}
}

void dfs2(int a,int b){
	int i;
	for (i=0;i<4;i++){
		int tx=a+dx[i];
		int ty=b+dy[i];
		if (map[a][b]=='*') continue;
		map[a][b]='*';//变成自己的棋子
		dfs2(tx,ty); 
	}
	
}
int main(){
	int j,i,cas=1;
	scanf ("%d",&t);
	while (t--){
		scanf ("%d%d",&n,&m);
		for (i=0;i<n;i++){
			scanf ("%s",map[i]);
		}
		for (i=1;i<n-1;i++){
			for (j=1;j<m-1;j++){
				if (map[i][j]=='.'){
					memset(vis,false,sizeof(vis));//注意初始化的位置
					flag=true;
					dfs1(i,j);
					if (flag){
						map[i][j]='*';
						dfs2(i,j);
					}
				}
			}
		}
		printf ("Case %d:\n",cas++);
		for (i=0;i<n;i++)
		printf ("%s\n",map[i]);
	}
	return 0;
}


内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值