poj2965

poj2965

dfs,O(2^16)

 

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

bool map[4][4];
int ans[16];

void init()
{
	int i, j;

	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			char ch;
			cin >> ch;
			if (ch == '-')
				map[i][j] = true;
			else
				map[i][j] = false;
		}
		getchar();
	}
}

void operate(int x, int y)
{
	if (x < 0 || y < 0 || x > 3 || y > 3)
		return;
	map[x][y] = !map[x][y];
}

void turn(int pos)
{
	ans[pos] = !ans[pos];
	int x = pos / 4;
	int y = pos % 4;
	int i;
	operate(x, y);
	for (i = 1; i < 4; i++)
	{
		operate(x + i, y);
		operate(x, y + i);
		operate(x - i, y);
		operate(x, y - i);
	}
}

bool finished()
{
	int tot = 0;
	int i;
	for (i = 0; i < 16; i++)
		tot += map[i / 4][i % 4];
	return (tot == 16);
}

void output()
{
	int i;
	for (i = 0; i < 16; i++)
	{
		if (ans[i])
			printf("%d %d\n", i / 4 + 1, i % 4 + 1);
	}
}

void dfs(int pos, int step)
{
	if (finished())
	{
		cout << step << endl;
		output();
		exit(0);
		return;
	}
	if (pos >= 16)
		return;
	dfs(pos + 1, step);
	turn(pos);
	dfs(pos + 1, step + 1);
	turn(pos);//这句忘了写,导致错误
}

int main()
{
	//freopen("D:\\t.txt", "r", stdin);
	init();
	dfs(0, 0);

	return 0;
}

转载于:https://www.cnblogs.com/rainydays/archive/2011/02/01/1948683.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110664.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • plot颜色设置_matlab plot颜色

    plot颜色设置_matlab plot颜色怎么分别设置点和线条的颜色?p.plot(color=”r,secondary_y=True,style=’-*’,linewidth=2)怎么把点和线设置为两种不同的颜色?

    2022年10月16日
    0
  • 如何理解css中的float

    最近一段时间一直在为一个即将上线的新站进行一些前端开发。自然,对CSS的使用是必不可少的了。我们在CSS中很多时候会用到浮动来布局。常见的有float:left或者float:right。简单点来说,

    2021年12月20日
    50
  • Java多线程死锁问题

    Java多线程死锁问题死锁这么重要,请仔细阅读死锁问题死锁定义死锁举例如何排查死锁死锁发生的条件怎么解决死锁问题?线程通讯机制(wait/notify/notifyAll)LockSupport死锁问题死锁定义多线程编程中,因为抢占资源造成了线程无限等待的情况,此情况称为死锁。死锁举例注意:线程和锁的关系是:一个线程可以拥有多把锁,一个锁只能被一个线程拥有。当两个线程分别拥有一把各自的锁之后,又尝试去获取对方的锁,这样就会导致死锁情况的发生,具体先看下面代码:/***线程死锁问题*/public

    2022年7月13日
    11
  • Centos 安装图形界面与远程使用「建议收藏」

    Centos 安装图形界面与远程使用「建议收藏」Centos安装图形界面与远程登录使用(1)图形界面安装在联网的情况下使用yum命令安装即可需要安装xwindow服务与desktop桌面,不分先后,命令如下:yumgroupinstall”Desktop”yumgroupinstall”XWindowSystem”最后启动输入命令startXvnc

    2022年5月29日
    84
  • 小程序bindtap传参_微信小程序bindtap

    小程序bindtap传参_微信小程序bindtap一边开发一边做点笔记,东西可能零散了点,一边开发一边补充。1、事件 1.bindtap绑定点击事件 2.bindinput监听输入,没输入一个字符得到一次返回值(就算是输入中文时,没敲一次键依然返回一次)2、解决小程序tabBar跳转不能带参数问题小程序这里遇到了一个难题就是如果实现tabBar栏之间的跳转的话是不能传入参数的那么我们要如何解决这个问题呢! 我的办法就是让你的传…

    2025年6月2日
    0
  • pycharm 2021 输入激活码 Key is invalid【在线注册码/序列号/破解码】[通俗易懂]

    pycharm 2021 输入激活码 Key is invalid【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    262

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号