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

為你寫詩

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++中,為了解決一些頻繁調用的小函數大量消耗棧空間或者是叫棧內存的問題,特別的引入了inline修飾符,表示為內聯函數。 
  可能說到這里,很多人還不明白什么是??臻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>
            欧美激情网友自拍| 欧美一区二区三区在线播放| 国产日韩精品久久| 国产亚洲制服色| 99re热这里只有精品视频| 亚洲欧洲一区二区三区久久| 欧美一区二区三区四区高清 | 久久久久久久久一区二区| 亚洲欧美在线免费观看| 国产区日韩欧美| 久久午夜视频| 欧美国产乱视频| 亚洲美洲欧洲综合国产一区| 亚洲国产一区二区在线| 久热爱精品视频线路一| 99精品国产高清一区二区| 日韩视频免费在线观看| 亚洲国产高清aⅴ视频| 欧美日韩成人综合天天影院| 亚洲专区一区| 免费观看不卡av| 亚洲视频一区二区在线观看| 性久久久久久久| 在线观看亚洲一区| 在线一区视频| 亚洲激情中文1区| 欧美在线视频一区| 亚洲一区二区免费| 欧美aⅴ一区二区三区视频| 亚洲精品在线三区| 亚洲综合二区| 亚洲天堂av在线免费观看| 久久综合伊人| 久久综合一区| 国产精品高潮呻吟久久av黑人| 美日韩精品免费| 一区二区三区在线观看欧美| 99视频有精品| 日韩性生活视频| 欧美韩日一区二区| 欧美激情一区二区三区在线视频| 国产日韩精品视频一区| 中国成人黄色视屏| 久久精品人人| 亚洲福利视频二区| 欧美国产91| 亚洲免费中文| 亚洲电影网站| 亚洲午夜小视频| 激情小说另类小说亚洲欧美 | 99视频+国产日韩欧美| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲精品美女在线观看| 99热在这里有精品免费| 国产精品sss| 亚洲视频在线免费观看| 欧美在线资源| 亚洲精品久久久久久久久| 国产精品区一区二区三区| 欧美不卡视频| 久久精品欧美日韩精品| 亚洲国产一区二区精品专区| 亚洲自拍偷拍麻豆| 亚洲电影在线免费观看| 欧美日韩一区二区免费视频| 日韩天堂在线观看| 久久亚洲精品一区二区| 亚洲欧美日韩综合aⅴ视频| 亚洲精品综合在线| 国产午夜精品一区二区三区视频| 欧美日韩视频在线观看一区二区三区| 久久精品99| 性欧美videos另类喷潮| 亚洲亚洲精品三区日韩精品在线视频| 欧美成人免费在线观看| 午夜日韩激情| 亚洲视频一区二区在线观看 | 牛牛国产精品| 欧美在线黄色| 香蕉久久夜色精品| 欧美一区1区三区3区公司| 在线亚洲一区二区| 99国产精品99久久久久久粉嫩| 亚洲大胆人体视频| 91久久中文| 99精品久久久| 亚洲伊人第一页| 亚洲国产导航| 亚洲一区在线免费| 亚洲欧美视频在线| 欧美亚洲免费电影| 女人香蕉久久**毛片精品| 欧美在线啊v| 欧美激情精品久久久久久大尺度| 亚洲黄色三级| 性欧美videos另类喷潮| 美国十次成人| 国产精品乱人伦一区二区| 亚洲一区二区动漫| 久久精品人人爽| 欧美日韩第一页| 国产日韩亚洲欧美| 9色porny自拍视频一区二区| 亚洲欧美日韩一区在线| 女女同性女同一区二区三区91| 日韩视频一区| 久久综合亚洲社区| 国产日韩精品一区二区三区在线| 亚洲福利国产精品| 久久国产手机看片| 国产精品99久久99久久久二8| 另类尿喷潮videofree| 国产精品日韩欧美综合| 亚洲作爱视频| 亚洲电影观看| 欧美大片在线观看一区二区| 国内精品久久久| 久久久夜夜夜| 久久成人免费日本黄色| 国产在线国偷精品产拍免费yy| 亚洲视频中文| 亚洲一区激情| 国产精品网曝门| 先锋影音网一区二区| 亚洲欧美第一页| 国产亚洲亚洲| 亚洲国产精品久久久久久女王| 亚洲国产经典视频| 欧美激情精品久久久久久免费印度 | 久久久www免费人成黑人精品 | 欧美一区二区三区四区在线观看地址 | 精品91视频| 久久蜜桃精品| 久久精品99久久香蕉国产色戒| 国产精品一区一区三区| 欧美在线视频日韩| 欧美一乱一性一交一视频| 伊人夜夜躁av伊人久久| 蜜臀久久99精品久久久画质超高清| 久久国产综合精品| 亚洲精品欧洲精品| 亚洲伊人第一页| 亚洲精品国产品国语在线app| 中文精品99久久国产香蕉| 亚洲国产你懂的| 欧美亚洲综合在线| 一本色道久久综合狠狠躁篇怎么玩| 亚洲网站视频| 日韩视频免费大全中文字幕| 在线性视频日韩欧美| 在线免费观看日本一区| 亚洲伊人网站| 国产一区二区三区自拍| 一本一本久久| 一区二区久久久久| 欧美网站在线观看| 一本一本久久a久久精品综合麻豆| 尤物精品在线| 久久一二三四| 亚洲国产欧美一区二区三区丁香婷| 国产精品午夜电影| 亚洲淫性视频| 美女黄毛**国产精品啪啪| 国产一区二区三区四区老人| 亚洲男人第一av网站| 亚洲欧美激情在线视频| 亚洲综合大片69999| 欧美永久精品| 亚洲青涩在线| 欧美韩日一区二区| 亚洲素人在线| 国产日韩欧美精品一区| 欧美在线看片| 亚洲激情成人网| 亚洲一区二区三区四区中文| 国产精品美女一区二区| 久久福利毛片| 亚洲黄页视频免费观看| 亚洲免费视频一区二区| 国产主播一区二区| 欧美国产极速在线| 欧美在线观看视频一区二区| 亚洲狠狠丁香婷婷综合久久久| 一区二区三区日韩精品| 国产欧美日韩一区二区三区| 欧美1级日本1级| 欧美一乱一性一交一视频| 99热免费精品| 亚洲日本成人女熟在线观看| 久久这里只有| 久久资源在线| 在线观看日韩精品| 亚洲黄色视屏| 欧美日韩一区二区三区| 一区二区三区精品国产| 精品成人a区在线观看| 亚洲一区日本| 久久精品国产99精品国产亚洲性色 | 99精品国产一区二区青青牛奶 | 亚洲国产精品小视频|