• 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

  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/yangyh/p/2073307.html
Copyright © 2020-2023  润新知