zoukankan      html  css  js  c++  java
  • POJ 1753/BFS:翻转棋

    黑白棋翻转

    4X4的棋盘有2^16种状态,如果状态值为0或65535则算法结束

    第一层:初始状态

    第二层:初始状态翻0、初始状态翻1、初始状态翻……初始状态翻15

    第三层:  ………………………….

    如果该状态值未访问过,则入队列

    #include <iostream>
    #define MAX_STATE 65535
    #define ALL_BLACK 65535
    #define ALL_WHITE 0
    #define WIDTH 4
    #define HEIGTH 4
    #define SIZE_OF_BOARD WIDTH*HEIGTH
    #include <queue>
    
    using namespace std;
    
    int flip(int current,int pos){
    	current ^=1<<pos;
    	if(pos>=WIDTH)current ^=1<<(pos-WIDTH);
    	if(pos+WIDTH<SIZE_OF_BOARD)current ^=1<<(pos+WIDTH);
    	if(pos%WIDTH!=0)current ^=1<<(pos-1);
    	if(pos%WIDTH!=WIDTH-1)current ^=1<<(pos+1);
    	return current;
    }
    int main(int argc, char* argv[])
    {
    	
    	
    	int step[MAX_STATE];
    	int current_state = 0,next_state;
    //	for(int i=0;i<HEIGTH;i++)
    //	{
    //		for(int j=0;j<WIDTH;j++)
    //			current_state += (getchar()=='b')<<(i*WIDTH+j);
    //		getchar();	
    //		
    //	}
    	//debug("%d",8^2);
    	char c;
    	for(int i=0;i<SIZE_OF_BOARD;i++)
    	{
    		cin>>c;
    		current_state += (c=='b')<<(i);
    		//debug("%d",c);
    	}
    	if(current_state==ALL_WHITE||ALL_BLACK==current_state){
    		printf("0\n");
    		return 0;
    	}
    	memset(step,-1,MAX_STATE);
    	queue<int> q;
    	q.push(current_state);
    	step[current_state]=0;
    	//debug("%d",current_state);
    	while(!q.empty()){
    		current_state = q.front();
    		q.pop();
    		//debug("%d",current_state);
    		for(int i=0;i<SIZE_OF_BOARD;i++)
    		{
    			next_state = flip(current_state,i);
    			
    			if(next_state==ALL_WHITE||next_state==ALL_BLACK){
    				printf("%d\n",step[current_state]+1);
    				return 0;
    			}
    			if(-1==step[next_state]){
    				step[next_state] = step[current_state]+1;
    				q.push(next_state);
    			}
    		}
    		
    	}
    	printf("Impossible\n");
    	//debug("%d",current_state);
    	
    	
    	return 0;
    }

    躲猫猫社团团长 http://t.sina.com.cn/coolria

  • 相关阅读:
    Redis-内存优化(一)
    window激活
    ArrayDeque原理详解
    CountDownLatch原理详解
    DelayQueue延迟队列原理剖析
    浅析PriorityBlockingQueue优先级队列原理
    修改QT库的路径
    数据同步Datax与Datax_web的部署以及使用说明
    HTTP头的Expires与Cache-control
    python生成随机数、随机字符串
  • 原文地址:https://www.cnblogs.com/yangyh/p/2073307.html
Copyright © 2011-2022 走看看