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

技術,瞎侃,健康,休閑……

mahu@cppblog 人類的全部才能無非是時間和耐心的混合物
posts - 11, comments - 13, trackbacks - 0, articles - 12
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

The Blocks Problem

Posted on 2006-06-10 01:16 mahudu@cppblog 閱讀(900) 評論(1)  編輯 收藏 引用 所屬分類: C/C++

Background?

Many areas of Computer Science use simple, abstract domains for both analytical and empirical studies. For example, an early AI study of planning and robotics (STRIPS) used a block world in which a robot arm performed tasks involving the manipulation of blocks.

In this problem you will model a simple block world under certain rules and constraints. Rather than determine how to achieve a specified state, you will ``program'' a robotic arm to respond to a limited set of commands.

The Problem?

The problem is to parse a series of commands that instruct a robot arm in how to manipulate blocks that lie on a flat table. Initially there are n blocks on the table (numbered from 0 to n-1) with block bi adjacent to block bi+1 for all $0 \leq i < n-1$ as shown in the diagram below:
?
\begin{figure}
\centering
\setlength{\unitlength}{0.0125in} %
\begin{picture}
(2...
...raisebox{0pt}[0pt][0pt]{$\bullet
\bullet \bullet$ }}}
\end{picture}
\end{figure}
Figure: Initial Blocks World

The valid commands for the robot arm that manipulates blocks are:

  • move a onto b

    where a and b are block numbers, puts block a onto block b after returning any blocks that are stacked on top of blocks a and b to their initial positions.

  • move a over b

    where a and b are block numbers, puts block a onto the top of the stack containing block b, after returning any blocks that are stacked on top of block a to their initial positions.

  • pile a onto b

    where a and b are block numbers, moves the pile of blocks consisting of block a, and any blocks that are stacked above block a, onto block b. All blocks on top of block b are moved to their initial positions prior to the pile taking place. The blocks stacked above block a retain their order when moved.

  • pile a over b

    where a and b are block numbers, puts the pile of blocks consisting of block a, and any blocks that are stacked above block a, onto the top of the stack containing block b. The blocks stacked above block a retain their original order when moved.

  • quit

    terminates manipulations in the block world.

Any command in which a = b or in which a and b are in the same stack of blocks is an illegal command. All illegal commands should be ignored and should have no affect on the configuration of blocks.

The Input?

The input begins with an integer n on a line by itself representing the number of blocks in the block world. You may assume that 0 < n < 25.

The number of blocks is followed by a sequence of block commands, one command per line. Your program should process all commands until the quit command is encountered.

You may assume that all commands will be of the form specified above. There will be no syntactically incorrect commands.

The Output?

The output should consist of the final state of the blocks world. Each original block position numbered i ( $0 \leq i < n$ where n is the number of blocks) should appear followed immediately by a colon. If there is at least a block on it, the colon must be followed by one space, followed by a list of blocks that appear stacked in that position with each block number separated from other block numbers by a space. Don't put any trailing spaces on a line.

There should be one line of output for each block position (i.e., n lines of output where n is the integer on the first line of input).

Sample Input?

10
move 9 onto 1
move 8 over 1
move 7 over 1
move 6 over 1
pile 8 over 6
pile 8 over 5
move 2 over 1
move 4 over 9
quit

Sample Output?

 0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:

Solution

#include?<stdio.h>
#define?MAXB?100?????????????????????/*?maximum?number?of?blocks?*/
????
typedef?
struct?block{
????
struct?block?*above;
????
struct?block?*below;
????
int?index;
}
?block;

block?blocks[MAXB];??????????????????
/*?storage?for?the?blocks?*/
block?
*table[MAXB];??????????????????/*?pointers?to?each?block?*/
int?numBlocks;?????????????????????????/*?the?actual?number?of?blocks?*/


void?InitBlocks()
/*?initially?table[i]?-->?blocks[i],?one?block?per?stack?*/?????
{
????
int?i;
????
for(i=0;i<numBlocks;i++){
????blocks[i].index?
=?i;
????blocks[i].above?
=?(block?*)?NULL;
????blocks[i].below?
=?(block?*)?NULL;
????table[i]?
=?&blocks[i];
????}

}



block?
*BlockTop(int?n)
/*?return?a?pointer?to?the?block?on?top?of?the?stack?in?which?block?*/
/*?n?is?located?*/?????
{
????block?
*temp?=?table[n];

????
while?(temp->above?!=?(block?*)?NULL){
????temp?
=?temp->above;
????}

????
return?temp;
}



void?ClearStackAbove(int?n)
/*?return?all?blocks?stacked?above?block?n?to?their?original?spot?*/?????
{
????block?
*top,*next;

????top?
=?BlockTop(n);
????
while?(top?!=?table[n]){??????/*?until?we?reach?block?n?*/
????next?
=?top->below;

????
/*?unlink?block?from?stack?*/
????top
->above?=?(block?*)?NULL;
????top
->below?=?(block?*)?NULL;
????
????top?
=?next;
????}

????table[n]
->above?=?(block?*)?NULL;
}


void?MoveOnto(int?n,int?k)
{
????ClearStackAbove(n);
????ClearStackAbove(k);
????table[k]
->above?=?table[n];????????/*?move?n?onto?k?*/
????
if?(table[n]->below)??????????????/*?be?safe?when?relinking?*/
????table[n]
->below->above?=?(block?*)?NULL;
????table[n]
->below?=?table[k];
}


void?PileOnto(int?n,int?k)
{
????ClearStackAbove(k);
????table[k]
->above?=?table[n];????????????/*?move?n?onto?k??*/
????
if?(table[n]->below)????????/*?be?safe?when?relinking?*/
????table[n]
->below->above?=?(block?*)?NULL;
????table[n]
->below?=?table[k];
}


int?IsOver(int?n,int?k)
/*?return?1?if?block?n?is?"over"?block?k?(same?stack),?else?0?*/?????
{
????block?
*temp;

????temp?
=?table[k];
????
while?(temp){
????
if?(temp->index?==?n)
????????
return?1;
????temp?
=?temp->above;
????}

????
return?0;
}


????
void?MoveOver(int?n,int?k)
{
????block?
*top;
????
????ClearStackAbove(n);
????top?
=?BlockTop(k);????????????/*?top?of?block?k's?stack?*/
????top
->above?=?table[n];
????
if?(table[n]->below)????????????/*?be?safe?when?relinking?*/
????table[n]
->below->above?=?(block?*)?NULL;
????table[n]
->below?=?top;
}


void?PileOver(int?n,int?k)
{
????block?
*top;
????
????top?
=?BlockTop(k);????????????/*?top?of?block?k's?stack?*/
????top
->above?=?table[n];????
????
if?(table[n]->below)????????????/*?be?safe?when?relinking?*/
????table[n]
->below->above?=?(block?*)?NULL;????
????table[n]
->below?=?top;
}


main()
{

????
char?ch;
????
int?n,k;
????block?
*bottom;
????
char?b1[10],b2[10];???????????????/*?b1?=?move/pile,?b2?=?onto/over?*/
????
char?*w1?=?&b1[0];
????
char?*w2?=?&b2[0];

????scanf(
"%d\n",&numBlocks);
????InitBlocks();
????
while?(1){
????scanf(
"%s",w1);
????
if?(w1[0]?==?'q')???/*?quit??*/
????????
break;
????scanf(
"%d?%s?%d\n",&n,w2,&k);

????
/*?is?command?a?legal?command??*/
????
if?(n?==?k?||?IsOver(k,n)?||?IsOver(n,k)){
????????
continue;
????}

????
????
switch?(w1[0]){
??????
case?'m':
????????
switch?(w2[1]){
??????????
case?'n':????/*?onto?*/
????????MoveOnto(n,k);
????????
break;
??????????
case?'v':????/*?over?*/
????????MoveOver(n,k);
????????
break;
??????????
default:
????????fprintf(stderr,
"illegal?command?%s\n",w2);
????????}

????????
break;
??????
case?'p':
????????
switch?(w2[1]){
??????????
case?'n':????/*?onto?*/
????????PileOnto(n,k);
????????
break;
??????????
case?'v':????/*?over?*/
????????PileOver(n,k);
????????
break;
??????????
default:
????????fprintf(stderr,
"illegal?command?%s\n",w2);
????????}

????????
break;
??????
default:
????????fprintf(stderr,
"illegal?command?%s\n",w2);
????}

????}


????
/*?print?stacks?*/
????
????
for(k=0;k<numBlocks;k++){
????printf(
"%2d:?",k);

????
/*?is?block?in?another?stack?,?if?so,?nothing?to?print?*/
????
????
if?(table[k]->below?!=?(block?*)?NULL){
????????printf(
"\n");
????}

????
else{
????????bottom?
=?table[k];
????????
while?(bottom){
????????printf(
"?%d",bottom->index);
????????bottom?
=?bottom->above;
????????}

????????printf(
"\n");
????}

????}

????
}

Feedback

# re: The Blocks Problem[未登錄]  回復  更多評論   

2007-05-31 16:05 by Joe
最近在做電子商務的翻譯,不知道The Blocks Problem 是什么意思?怎么這里也沒有中文解釋啊!好不郁悶!
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品在线视频观看| 亚洲一区在线播放| 亚洲日本激情| 国产自产女人91一区在线观看| 国产精品s色| 欧美调教视频| 欧美亚洲成人免费| 欧美私人啪啪vps| 国产精品国产| 国产日韩在线亚洲字幕中文| 影音先锋亚洲视频| 亚洲精品一级| 午夜精品久久久久久久蜜桃app| 正在播放亚洲一区| 欧美一乱一性一交一视频| 久久成人18免费网站| 久久久久久午夜| 免费亚洲一区二区| 亚洲国产三级网| 欧美大色视频| 一区二区三区鲁丝不卡| 欧美一区二区性| 欧美在线日韩在线| 欧美久久久久久久久久| 国产精品久久久久国产精品日日| 国产人成一区二区三区影院| 在线日韩视频| 亚洲片区在线| 欧美影院视频| 亚洲精品国精品久久99热| 亚洲欧美综合精品久久成人| 欧美大胆a视频| 国精产品99永久一区一区| 一区二区三区www| 另类天堂视频在线观看| 在线视频日韩| 欧美电影在线| 有坂深雪在线一区| 欧美亚洲专区| 亚洲美女91| 欧美成人激情在线| 国内精品一区二区| 欧美一区观看| 中文一区在线| 欧美日韩亚洲激情| 亚洲人成人一区二区三区| 久久视频在线视频| 亚洲欧美激情四射在线日 | 久久久久se| 国产精品v欧美精品∨日韩| 在线精品视频在线观看高清 | 亚洲电影免费观看高清完整版在线观看 | 亚洲欧美精品中文字幕在线| 欧美大尺度在线观看| 亚欧成人精品| 国产精品三区www17con| 中文一区字幕| 91久久精品国产91性色| 久久只精品国产| 一色屋精品视频在线看| 久久婷婷国产综合精品青草| 先锋影音久久久| 国产日韩专区在线| 久久视频这里只有精品| 欧美在线观看网站| 激情久久五月| 欧美成人在线网站| 欧美1区2区3区| 日韩亚洲欧美成人| 99re6这里只有精品| 欧美日韩理论| 亚洲主播在线| 亚洲欧美在线aaa| 国产精品theporn88| 午夜在线成人av| 欧美一级免费视频| 亚洲高清在线观看| 亚洲欧洲日韩综合二区| 欧美日韩国产123区| 亚洲直播在线一区| 亚洲男女自偷自拍| 激情综合自拍| 亚洲欧洲精品一区| 亚洲国产欧美一区二区三区久久| 欧美国产1区2区| 在线一区二区三区四区| 亚洲无限乱码一二三四麻| 国产亚洲aⅴaaaaaa毛片| 老妇喷水一区二区三区| 欧美v亚洲v综合ⅴ国产v| 亚洲一区欧美二区| 亚洲欧美自拍偷拍| 亚洲国产精彩中文乱码av在线播放| 亚洲福利久久| 亚洲精品系列| 国产亚洲欧美一区二区三区| 欧美成人免费一级人片100| 欧美日韩一区二区三区在线看| 性做久久久久久久免费看| 久久久精品一区| 一区二区久久| 久久久免费精品视频| 宅男精品导航| 久久综合九色欧美综合狠狠| 亚洲免费中文字幕| 欧美jizzhd精品欧美喷水| 欧美一区激情| 欧美激情第二页| 久久久www免费人成黑人精品| 欧美精品在线一区二区| 久热精品在线| 国产精品外国| 亚洲另类自拍| 亚洲国产精品成人| 新狼窝色av性久久久久久| 一区二区国产精品| 麻豆成人小视频| 久久黄金**| 国产精品久久久久久模特| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲图片欧洲图片av| 亚洲国内自拍| 久久高清免费观看| 亚洲欧美日韩在线观看a三区 | 久久综合激情| 久久精品久久99精品久久| 欧美少妇一区| 亚洲人成在线观看| 亚洲国产天堂久久综合网| 欧美一区二区精品| 午夜精品影院| 国产精品久久999| 99精品欧美一区二区三区综合在线 | 欧美喷水视频| 欧美高清视频一区二区| 激情综合久久| 久久成人免费电影| 久久国产精品久久国产精品| 国产精品美女视频网站| 一区二区精品国产| 亚洲一区三区电影在线观看| 欧美女激情福利| 亚洲日本激情| 9l视频自拍蝌蚪9l视频成人| 欧美国产一区视频在线观看| 亚洲国产精品一区二区第一页| 亚洲第一视频网站| 免费不卡中文字幕视频| 欧美激情一区二区三区高清视频| 在线精品观看| 欧美国产日韩二区| 亚洲人成小说网站色在线| 亚洲精品一区二区三区婷婷月 | 欧美韩日一区| 日韩一级视频免费观看在线| 亚洲深夜福利视频| 国产精品午夜久久| 欧美在线关看| 亚洲国产精品国自产拍av秋霞| 9l国产精品久久久久麻豆| 欧美视频你懂的| 亚洲欧美日韩精品| 麻豆成人精品| 日韩亚洲一区二区| 国产精品乱子久久久久| 欧美在线免费观看视频| 欧美激情精品久久久| 亚洲婷婷综合久久一本伊一区| 国产精品女人网站| 久久人人爽爽爽人久久久| 亚洲欧洲日产国产网站| 午夜在线电影亚洲一区| 在线免费不卡视频| 欧美日韩精品免费观看视一区二区 | 亚洲黄色av| 亚洲欧美bt| 在线观看日韩www视频免费| 欧美巨乳在线观看| 欧美一区二区高清在线观看| 亚洲高清网站| 久久www成人_看片免费不卡| 在线看视频不卡| 国产精品毛片高清在线完整版 | 欧美天天综合网| 久久蜜桃精品| 亚洲视频成人| 亚洲福利视频三区| 久久国产视频网| 一区二区久久久久| 亚洲国产精品久久久久婷婷884| 国产精品久久久久久久久| 男女激情视频一区| 欧美尤物一区| 一区二区久久久久| 欧美激情一区二区三区成人| 久久久国产91| 翔田千里一区二区| 一区二区三区欧美亚洲| 亚洲欧洲午夜| 亚洲国产精品电影在线观看|