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

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

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>
            欧美精品国产精品日韩精品| 久久精品久久综合| 国产精品久久久久一区二区三区| 久久av二区| 久久久亚洲国产天美传媒修理工| 欧美一区二区视频观看视频| 久热精品视频在线免费观看| 久久综合色一综合色88| 久久精品综合一区| 毛片一区二区| 一本色道久久综合亚洲精品婷婷| 亚洲国产第一页| 欧美成人黑人xx视频免费观看| 亚洲电影自拍| 亚洲一区欧美| 久久综合给合| 欧美三级免费| 黄色免费成人| 99精品国产在热久久| 亚洲欧美日韩爽爽影院| 老司机aⅴ在线精品导航| 亚洲精品乱码久久久久久按摩观| 亚洲一区视频在线| 欧美激情亚洲综合一区| 国产一区二区三区高清 | 久久久水蜜桃| 欧美日韩理论| 国产亚洲人成网站在线观看| 亚洲人成久久| 久久久噜噜噜久噜久久| 亚洲免费观看在线观看| 久久成人精品| 国产精品国产三级国产aⅴ入口 | 亚洲激情电影在线| 亚洲欧美日本精品| 欧美二区在线播放| 亚洲一区二区三区四区五区午夜| 免费影视亚洲| 国内精品免费午夜毛片| 亚洲免费一级电影| 亚洲精品人人| 欧美成人性生活| 永久免费精品影视网站| 午夜视频一区在线观看| 亚洲人精品午夜| 久久综合一区二区| 一区久久精品| 久久久999成人| 一区二区欧美在线| 欧美风情在线| 亚洲国产精品久久久久婷婷老年| 亚洲欧美激情一区| 亚洲免费不卡| 欧美日韩国产在线播放网站| 亚洲国产一区二区三区在线播| 久久岛国电影| 欧美亚洲尤物久久| 国产日韩欧美在线播放不卡| 久久精品国产亚洲5555| 欧美一区二区黄色| 国产精品免费观看视频| 亚洲视频成人| 日韩亚洲一区二区| 欧美日韩一区二区三区在线 | 在线不卡a资源高清| 久久狠狠亚洲综合| 欧美中文在线观看| 国产专区欧美专区| 免费看成人av| 欧美mv日韩mv国产网站app| 亚洲成色777777女色窝| 亚洲激情在线观看| 欧美乱妇高清无乱码| 亚洲一区欧美二区| 午夜精品999| 激情欧美国产欧美| 亚洲国产精品一区二区久| 免费高清在线一区| 亚洲毛片在线观看| 亚洲一级片在线观看| 国产欧美日韩一区二区三区| 久久阴道视频| 欧美gay视频激情| 亚洲午夜视频在线观看| 欧美亚洲视频在线观看| 亚洲激情电影在线| 一区二区三区偷拍| 国产一区激情| 日韩视频中文字幕| 国产一区二区高清| 亚洲精品国产精品国产自| 国产精品视频yy9099| 牛牛影视久久网| 欧美色图五月天| 久久伊人亚洲| 国产精品卡一卡二| 欧美国产日韩在线观看| 欧美午夜视频| 玖玖在线精品| 国产精品成人在线观看| 美女视频网站黄色亚洲| 国产精品sss| 欧美大色视频| 国产精品一区二区久久久久| 欧美jjzz| 国产一区二区三区四区五区美女| 亚洲精品一二区| 亚洲国产成人高清精品| 欧美一区二区三区的| 亚洲神马久久| 欧美高清视频在线观看| 久久精品一区二区三区四区| 欧美日韩一区三区四区| 亚洲成色精品| 国产在线精品自拍| 亚洲一区二区三区四区视频| 亚洲精品美女在线观看| 性色一区二区三区| 一区二区91| 欧美v亚洲v综合ⅴ国产v| 久久不射中文字幕| 91久久精品一区| 一区二区三区**美女毛片| 激情视频一区二区| 亚洲尤物在线| 亚洲永久免费视频| 欧美激情久久久久| 亚洲大胆女人| 亚洲第一在线综合网站| 久久成年人视频| 久久久久久久久久久久久久一区 | 狠狠88综合久久久久综合网| 亚洲一区欧美激情| 亚洲欧美网站| 国产精品日韩在线播放| 亚洲天堂成人在线观看| 亚洲无玛一区| 国产精品视频精品| 亚洲免费中文| 99精品久久| 欧美日本精品| aa级大片欧美| 午夜伦欧美伦电影理论片| 国产精品久久久久久久app| 亚洲一区二区三区免费在线观看| 午夜精品久久久久久久白皮肤| 国产精品久久999| 欧美一区二区三区喷汁尤物| 久久精品导航| 精品不卡一区| 牛牛国产精品| 亚洲深夜影院| 久久婷婷久久一区二区三区| 91久久久久久久久久久久久| 欧美人体xx| 亚洲午夜精品久久久久久app| 香蕉久久夜色| 激情综合久久| 欧美精品999| 亚洲一区国产一区| 美女图片一区二区| 99视频精品在线| 国产精品嫩草久久久久| 欧美专区日韩专区| 欧美黄色免费| 亚洲网址在线| 激情欧美一区二区三区| 欧美日本国产在线| 欧美伊人久久久久久午夜久久久久| 免费一级欧美片在线观看| 中日韩美女免费视频网址在线观看| 国产精品普通话对白| 久久久久久久尹人综合网亚洲 | 亚洲国产视频直播| 一本大道久久a久久精二百| 国产日韩亚洲欧美精品| 欧美成人免费全部| 亚洲中无吗在线| 欧美激情第一页xxx| 亚洲欧美成人一区二区三区| 亚洲大片免费看| 国产精品电影网站| 久久手机免费观看| 中文国产亚洲喷潮| 亚洲国产二区| 麻豆久久婷婷| 欧美在线日韩精品| 中文精品视频| 亚洲黄色高清| 一本色道久久综合亚洲二区三区| 欧美成人免费一级人片100| 亚洲免费人成在线视频观看| 亚洲国产日韩在线| 国产在线观看精品一区二区三区 | 欧美日本一道本| 久久久久久久久岛国免费| 一区二区三区国产精华| 欧美激情视频一区二区三区在线播放 | 欧美一区午夜精品| 亚洲最新合集|