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

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

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

The Blocks Problem

Posted on 2006-06-10 01:16 mahudu@cppblog 閱讀(903) 評論(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久久精品美女| 久久久久国产精品人| 亚洲国产裸拍裸体视频在线观看乱了| 久久一本综合频道| 亚洲精品免费看| 欧美成人免费观看| 久久爱91午夜羞羞| 亚洲视频在线播放| 欧美日韩不卡合集视频| 一片黄亚洲嫩模| 亚洲福利国产| 欧美精品在线极品| 久久riav二区三区| 亚洲老板91色精品久久| 久久久xxx| 午夜久久久久久| 欧美一区二区视频在线观看2020| 亚洲电影免费观看高清完整版| 久久综合久色欧美综合狠狠| 欧美一级夜夜爽| 欧美中文字幕在线观看| 欧美一区二区三区啪啪| 欧美在线一级视频| 久久精品国产久精国产一老狼 | 欧美亚洲日本网站| 国产精品99久久久久久宅男| 亚洲国产日韩一级| 亚洲经典三级| 亚洲午夜在线观看视频在线| 亚洲欧美日韩精品在线| 亚洲欧美春色| 欧美激情一区二区三区高清视频| 亚洲韩国日本中文字幕| 亚洲一区视频在线| 久久国产精品99久久久久久老狼| 免费观看亚洲视频大全| 国产精品久久久一区二区| 精品成人国产| 校园激情久久| 最新高清无码专区| 中日韩美女免费视频网站在线观看| 一区二区国产日产| 久久亚洲高清| 亚洲男女毛片无遮挡| 欧美国产视频一区二区| 欧美激情第4页| 99国产精品国产精品久久| 小辣椒精品导航| 亚洲视频精选在线| 欧美日韩hd| 一区二区日韩精品| 亚洲国产精品123| 久久一区激情| 欧美精品电影| 这里是久久伊人| 一区二区三区.www| 国产乱码精品一区二区三区不卡| 一区免费在线| 亚洲激情在线| 国产精品亚洲аv天堂网| 久久久久久欧美| 欧美色视频一区| 亚洲国内在线| 亚洲国产精品精华液网站| 亚洲视频 欧洲视频| 亚洲国产影院| 久久久久久久97| 亚洲欧美国产精品桃花| 欧美精品成人| 亚洲精品午夜| 欧美gay视频| 亚洲国产成人久久综合| 亚洲欧美变态国产另类| 一本色道久久综合狠狠躁篇怎么玩| 久久久久国产精品一区三寸| 欧美一区二区三区另类| 久久久亚洲精品一区二区三区| 欧美三级午夜理伦三级中文幕| 亚洲国产精品久久久久| 亚洲国内精品| 欧美视频在线观看免费| 一区二区三区久久久| 午夜精品久久久久久久99热浪潮| 欧美日韩中文字幕在线视频| 国产精品99久久久久久白浆小说| 亚洲最新在线视频| 国产精品大片wwwwww| 亚洲午夜精品| 美女主播精品视频一二三四| 亚洲九九爱视频| 国产精品一二三四区| 久久视频免费观看| 亚洲美女诱惑| 久热这里只精品99re8久| 日韩亚洲欧美高清| 国产精品一区二区你懂得 | 国产九色精品成人porny| 久久精品成人一区二区三区蜜臀| 久久综合久久久| 亚洲一区二区三区在线视频| 国产欧美日韩亚洲精品| 欧美日韩一区二区在线视频 | 欧美日韩国产一区| 亚洲欧美色一区| 一区二区三欧美| 91久久精品国产91性色tv| 久久精品国产999大香线蕉| 国产亚洲福利| 欧美精品在欧美一区二区少妇| 亚洲在线播放| 亚洲人线精品午夜| 亚洲欧洲精品一区二区三区不卡 | 夜夜嗨av一区二区三区网页| 欧美国产日韩a欧美在线观看| 欧美在线3区| 久久亚洲美女| 欧美日韩一区二区三区免费| 亚洲深夜影院| 亚洲天堂视频在线观看| 亚洲精品影视在线观看| 亚洲精品日韩激情在线电影| 欧美黑人一区二区三区| 免费影视亚洲| 日韩特黄影片| 亚洲一区二区在线视频| 欧美一级视频免费在线观看| 久久久99爱| 欧美激情精品久久久久久黑人| 欧美激情成人在线视频| 国产精品久久网站| 国产亚洲欧美激情| 亚洲精品精选| 久久久久久亚洲精品杨幂换脸| 欧美成人免费在线视频| 日韩一级精品视频在线观看| 欧美在线二区| 欧美午夜免费影院| 影音先锋中文字幕一区| 在线视频欧美精品| 久久亚洲一区二区三区四区| 亚洲免费大片| 欧美aⅴ一区二区三区视频| 国产精品久久国产三级国电话系列 | 欧美成人免费视频| 午夜亚洲性色视频| 夜夜嗨av一区二区三区网页| 午夜亚洲视频| 国产午夜久久| 久久av一区二区三区| 亚洲永久精品国产| 国产精品hd| 一区二区三区免费网站| 亚洲国产日韩在线| 乱码第一页成人| 亚洲人成亚洲人成在线观看图片| 久久久久国产精品一区| 久久精品国产99国产精品| 国产精品青草久久| 欧美一区二区在线视频| 中文一区二区| 国产精品亚洲一区| 性色av一区二区三区| 亚洲一区国产精品| 国内精品国产成人| 美女国内精品自产拍在线播放| 久久精品女人| 亚洲精品色图| 亚洲一区在线免费| 狠狠色2019综合网| 蜜臀av国产精品久久久久| 亚洲欧美成人一区二区在线电影| 亚洲国产午夜| 国产亚洲午夜| 亚洲国产mv| 国产午夜精品一区理论片飘花| 欧美风情在线| 国产欧美在线| 亚洲欧洲日夜超级视频| 国产欧美一区二区在线观看| 亚洲激情校园春色| 国产一区二区在线观看免费| 亚洲毛片在线观看| 精品1区2区3区4区| 亚洲欧美日韩另类精品一区二区三区| 精品盗摄一区二区三区| 亚洲欧美中日韩| 亚洲在线中文字幕| 欧美视频专区一二在线观看| 亚洲日本无吗高清不卡| 亚洲激情黄色| 欧美成人国产| 91久久精品国产91性色| 亚洲欧洲99久久| 亚洲欧美日韩在线播放| 国产精品羞羞答答| 亚洲欧美在线磁力|