青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

為你寫詩

c/c++
隨筆 - 32, 文章 - 0, 評論 - 3, 引用 - 0
數據加載中……

poj1753---Flip game解題報告

Problem 1753 Flip Game

原文:http://m.shnenglu.com/NARUTOACM/archive/2010/04/26/100905.html

代碼:
inline 內聯函數的使用

c++中,為了解決一些頻繁調用的小函數大量消耗??臻g或者是叫棧內存的問題,特別的引入了inline修飾符,表示為內聯函數。 
  可能說到這里,很多人還不明白什么是??臻g,其實??臻g就是指放置程序的局部數據也就是函數內數據的內存空間,在系統下,??臻g是有限的,如果頻繁大量的使用就會造成因??臻g不足所造成的程序出錯的問題,函數的死循環遞歸調用的最終結果就是導致棧內存空間枯竭。
#include <iostream>  
#include <string>  
using namespace std;  
inline string dbtest(int a); //
函數原形聲明為inline:內聯函數  
void main()  
{  
    for (int i=1;i<=10;i++)  
    {  
        cout << i << ":" << dbtest(i) << endl;  
    }  
    cin.get();  
}  
string dbtest(int a)//
這里不用再次inline,當然加上inline也是不會出錯的  
{  
    return (a%2>0)?"
":"";  
}

  上面的例子就是標準的內聯函數的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for循環的內部所有調用dbtest(i)的地方都換成了(i%2>0)?"":""這樣就避免了頻繁調用函數對棧內存重復開辟所帶來的消耗。

  說到這里很多人可能會問,既然inline這么好,還不如把所謂的函數都聲明成inline,嗯,這個問題是要注意的,inline的使用是有所限制的,inline只適合函數體內代碼簡單的函數使用,不能包含復雜的結構控制語句例如while switch,并且不能內聯函數本身不能是直接遞歸函數(自己內部還調用自己的函數)。

  說到這里我們不得不說一下在c語言中廣泛被使用的#define語句,是的define的確也可以做到inline的這些工作,但是define是會產生副作用的,尤其是不同類型參數所導致的錯誤,由此可見inline有更強的約束性和能夠讓編譯器檢查出更多錯誤的特性,在c++中是不推薦使用define


struct定義類
Description

Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the other one is black and each piece is lying either it's black or white side up. Each round you flip 3 to 5 pieces, thus changing the color of their upper side from black to white and vice versa. The pieces to be flipped are chosen every round according to the following rules:

  1. Choose any one of the 16 pieces.
  2. Flip the chosen piece and also all adjacent pieces to the left, to the right, to the top, and to the bottom of the chosen piece (if there are any).


Consider the following position as an example:

bwbw
wwww
bbwb
bwwb
Here "b" denotes pieces lying their black side up and "w" denotes pieces lying their white side up. If we choose to flip the 1st piece from the 3rd row (this choice is shown at the picture), then the field will become:

bwbw
bwww
wwwb
wwwb
The goal of the game is to flip either all pieces white side up or all pieces black side up. You are to write a program that will search for the minimum number of rounds needed to achieve this goal.

Input

The input consists of 4 lines with 4 characters "w" or "b" each that denote game field position.

Output

Write to the output file a single integer number - the minimum number of rounds needed to achieve the goal of the game from the given position. If the goal is initially achieved, then write 0. If it's impossible to achieve the goal, then write the word "Impossible" (without quotes).

Sample Input

bwwb

bbwb

bwwb

bwww

Sample Output

4

 

解題思路

 

題意:

 

一個棋盤,有黑白兩種棋子。你可以翻動任一顆棋子,但是翻動有個規則,那就是該棋子周圍的棋子都要跟著翻轉,所謂翻轉就是白變黑或黑變白。讓你求出至少要翻轉的次數使得棋盤達到一種狀態,該狀態就是棋盤中所有棋子都是同一種顏色。

 

思路:

 

此題我用的方法是狀態壓縮bfs,令白棋的狀態為0,黑棋狀態為1,顯然要達到所要求的狀態就只有兩種情況:0000000000000000(2)=0(10);1111111111111111(2)=65535(10);因為有16個棋子,每個棋子一個狀態,剛好可以用一個int型。此題我用此方法優化到16ms的極限了,不曉得還能如何優化,希望大牛幫忙看看。貌似此題還可以枚舉做,這樣做貌似很快,一般0ms,但我不曉得如何枚舉,希望有大牛指點指點。源代碼如下:

 

源程序

 

#include<iostream>
using namespace std;
struct node
{
 int s;
 int c;
};
class Queue
{
public:
 node n[1<<17];
 int front;
 int rear;
 static const int f=(1<<17)-1;
 Queue()
 {
  front=rear=0;
 }
 void push(node x)
 {
  n[rear].s=x.s;
  n[rear].c=x.c;
  rear++;
  rear&=f;
 }
 void pop(node &x)
 {
  x.s=n[front].s;
  x.c=n[front].c;
  front++;
  front&=f;
 }
};
Queue q;
int p[5][5];
int flag[1<<17];
void inline init()
{
 int i,j;
 for(i=1;i<=4;i++)
 {
  for(j=1;j<=4;j++)
   p[i][j]=1<<(20-4*i-j);
 }
}
int main()
{
 init();
 int s=0;
 char a;
 int i,j;
 for(i=1;i<=4;i++)
 {
  for(j=1;j<=4;j++)
  {
   s=s<<1;
   scanf("%c",&a);
   if(a=='b')
    s=s^1;
  }
  getchar();
 }
 node n,t;
 n.s=s;
 n.c=0;
 q.push(n);
 int f=0;
 while(q.front!=q.rear)
 {
  q.pop(n);
  if(n.s==0||n.s==65535)
  {
   f=1;
   break;
  }
  for(i=1;i<=4;i++)
  {
   for(j=1;j<=4;j++)
   {
    int e=n.s;
    e^=p[i][j];
    if(i-1>0)
     e^=p[i-1][j];
    if(i+1<5)
     e^=p[i+1][j];
    if(j-1>0)
     e^=p[i][j-1];
    if(j+1<5)
     e^=p[i][j+1];
    t.s=e;
    t.c=n.c+1;
    if(!flag[e])
    {
     q.push(t);
     flag[e]=1;
    }
    if(t.s==0||t.s==65535)
    {
     n.s=t.s;
     n.c=t.c;
     f=1;
     break;
    }
   }
  }
  if(f==1)
   break;
 }
 if(f==1)
  printf("%d\n",n.c);
 else
  printf("Impossible\n");
 return 0;
}

 

posted on 2011-04-28 23:36 pp_zhang 閱讀(1281) 評論(0)  編輯 收藏 引用 所屬分類: acm

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品videossex性护士| 美女网站久久| 在线日韩欧美视频| 国产视频精品va久久久久久| 国产精品日产欧美久久久久| 国产精品视频久久| 国产一级精品aaaaa看| 激情综合电影网| 在线播放亚洲| 一本高清dvd不卡在线观看| 亚洲一区二区三区中文字幕在线 | 亚洲人体1000| 亚洲美女黄色片| 午夜精品久久久久久久久久久久久| 欧美一区二粉嫩精品国产一线天| 久久中文久久字幕| 亚洲精品一区中文| 亚洲亚洲精品三区日韩精品在线视频| 亚洲制服少妇| 久久综合电影| 国产精品v欧美精品v日韩精品| 国产精品区一区二区三| 在线观看欧美一区| 亚洲欧美日韩人成在线播放| 久久亚洲春色中文字幕| 99视频精品全国免费| 久久久久成人网| 欧美日韩直播| 亚洲欧洲在线播放| 久久国产欧美日韩精品| 亚洲精品一二| 久久免费国产精品| 国产精品久久999| 亚洲青涩在线| 美女性感视频久久久| 夜久久久久久| 蜜桃av噜噜一区| 亚洲一区二区黄色| 欧美日本一区二区视频在线观看| 激情综合在线| 久久久久成人精品| 亚洲在线黄色| 国产精品美女久久| 亚洲一区二区三区视频播放| 亚洲人成人77777线观看| 亚洲一二三区精品| 欧美日韩亚洲一区二区三区在线观看 | 亚洲一区二区三区四区中文 | 国产欧美日韩一区二区三区在线观看 | 亚洲视频在线一区| 欧美激情一区| 91久久综合| 欧美成人午夜剧场免费观看| 欧美一区观看| 亚洲视频在线观看一区| 欧美天天视频| 亚洲欧洲午夜| 美日韩丰满少妇在线观看| 亚洲一区二区三区激情| 国产精品国产三级国产aⅴ9色 | 亚洲一区精品电影| 亚洲欧洲三级| 欧美高清成人| 日韩视频免费在线观看| 亚洲破处大片| 欧美日韩精品综合在线| 中文一区在线| 制服丝袜亚洲播放| 国产精品福利在线观看网址| 亚洲一区免费看| 亚洲一区二区三区四区在线观看 | 亚洲精品国产视频| 欧美日韩八区| 亚洲小说春色综合另类电影| 亚洲午夜女主播在线直播| 国产精品专区第二| 久久精品国产欧美激情| 久久久久国产精品人| 亚洲精品色图| 一区二区三区日韩欧美精品| 亚洲视频视频在线| 国产精品久久久久久久午夜片| 亚洲欧美日韩一区二区| 久久精品国内一区二区三区| 最新国产拍偷乱拍精品| 99精品免费| 国产手机视频精品| 亚洲成在人线av| 国产精品电影在线观看| 久久成人精品无人区| 美女国内精品自产拍在线播放| 亚洲免费观看在线视频| 在线一区日本视频| 在线观看国产成人av片| 亚洲最新在线视频| 在线观看三级视频欧美| 一区二区三区高清| 在线精品国产欧美| 国产精品99久久久久久久女警 | 一二三区精品福利视频| 国产一区二区三区在线观看免费视频 | 国内精品久久久久伊人av| 亚洲电影观看| 国产一区二区三区久久悠悠色av| 91久久久国产精品| 国产性猛交xxxx免费看久久| 亚洲精品欧美一区二区三区| 国内精品一区二区三区| 99视频一区二区三区| 亚洲电影av在线| 亚洲欧美日韩中文在线制服| 亚洲麻豆av| 久久久久一区二区三区四区| 亚洲欧美另类在线观看| 欧美国产精品v| 欧美不卡在线| 激情综合视频| 欧美在线你懂的| 欧美一二三视频| 国产精品多人| 艳女tv在线观看国产一区| 亚洲国产精品激情在线观看| 欧美一二三视频| 午夜精品视频在线观看| 欧美色图五月天| 亚洲精品视频二区| 欧美88av| 亚洲国产成人精品久久久国产成人一区| 最新成人av网站| 在线看片成人| 夜久久久久久| 亚洲美女福利视频网站| 久久久免费精品视频| 久久大逼视频| 国产日韩欧美在线播放| 亚洲视频在线观看一区| 亚洲欧美在线播放| 国产精品xxxav免费视频| 亚洲麻豆av| 亚洲天堂av图片| 欧美午夜精品一区| 亚洲私人影院| 欧美在线视频免费| 国产曰批免费观看久久久| 香蕉成人久久| 久久女同互慰一区二区三区| 亚洲欧洲精品成人久久奇米网| 久久精品最新地址| 久久久www成人免费精品| 国产视频一区三区| 久久成人国产| 欧美高清一区| 亚洲图片欧洲图片av| 国产精品扒开腿做爽爽爽软件| 一本久久a久久免费精品不卡| 亚洲综合日韩| 国产有码在线一区二区视频| 麻豆91精品| 日韩亚洲一区二区| 欧美一区二区视频在线观看2020| 国产日韩专区| 欧美国产精品中文字幕| 亚洲深夜影院| 美国十次成人| 国产精品久久久久婷婷| 一本色道精品久久一区二区三区| 亚洲伊人久久综合| 国产午夜久久| 欧美激情视频一区二区三区免费 | 亚洲男人的天堂在线aⅴ视频| 国产麻豆91精品| 久久影院午夜片一区| 日韩午夜在线电影| 久久久久久久尹人综合网亚洲 | 久久在线免费| 99re6这里只有精品| 久久一日本道色综合久久| 亚洲精品国产视频| 国产亚洲精品7777| 欧美日韩国产首页在线观看| 欧美在线视屏| 日韩一二在线观看| 美女网站久久| 欧美综合国产| 亚洲一区二区av电影| 亚洲国产一区二区三区a毛片| 国产精品理论片在线观看| 美女网站久久| 久久精品国产一区二区三| 亚洲欧洲视频| 黑人巨大精品欧美黑白配亚洲| 欧美日韩国产在线看| 久久久久久一区二区三区| 亚洲一区二区三区四区中文 | 久久久久91| 午夜国产欧美理论在线播放 | 欧美精品www| 久久日韩精品| 欧美在线观看一二区| 亚洲香蕉伊综合在人在线视看|