zoukankan      html  css  js  c++  java
  • poj1753

    dfs,搜索所有的操作方法,O(2^16)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    
    bool map[4][4];
    int ans = 100;
    
    void init()
    {
    	int i, j;
    
    	for (i = 0; i < 4; i++)
    	{
    		for (j = 0; j < 4; j++)
    		{
    			char ch;
    			cin >> ch;
    			if (ch == 'b')
    				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)
    {
    	int x = pos / 4;
    	int y = pos % 4;
    	operate(x, y);
    	operate(x + 1, y);
    	operate(x, y + 1);
    	operate(x - 1, y);
    	operate(x, y - 1);
    }
    
    bool finished()
    {
    	int tot = 0;
    	int i;
    	for (i = 0; i < 16; i++)
    		tot += map[i / 4][i % 4];
    	return ((tot % 16) == 0);
    }
    
    void dfs(int pos, int step)
    {
    	if (finished())
    	{
    		if (ans > step)
    			ans = step;
    		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);
    	if (ans == 100)
    		cout << "Impossible" << endl;
    	else
    		cout << ans << endl;
    	return 0;
    }
  • 相关阅读:
    第 2 章 MySQL 架构组成
    MySql学习笔记
    大型项目成功的关键
    内连接区别外连接
    UML2.0
    软件架构师之路
    UVA
    ZOJ
    UVA
    UVA
  • 原文地址:https://www.cnblogs.com/rainydays/p/1948684.html
Copyright © 2011-2022 走看看