栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1525 Hi

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1525 Hi

#define _CRT_SECURE_NO_WARNINGS#include<cstdio>enum Status{OUT,EMPTY,TAKEN};const int NONE=-1;const int HEIGHT=7,WIDTH=7,POS_NUM=33;const int ROWS[POS_NUM]={0,0,0,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,6,6};const int COLS[POS_NUM]={2,3,4,2,3,4,0,1,2,3,4,5,6,0,1,2,3,4,5,6,0,1,2,3,4,5,6,2,3,4,2,3,4};int POS_BOARD[HEIGHT][WIDTH];const int DIR_NUM=4;const int ROW_SHIFT[DIR_NUM]={-1,0,1,0};const int COL_SHIFT[DIR_NUM]={0,1,0,-1};#ifdef _DEBUGvoid printBoard(Status board[HEIGHT][WIDTH]){for(int row=0;row<HEIGHT;row++){for(int col=0;col<WIDTH;col++){switch(board[row][col]){case OUT:printf(" ");break;case EMPTY:printf("O");break;case TAKEN:printf("X");break;}}printf("n");}}#endifStatus& status(Status board[HEIGHT][WIDTH],int pos){return board[ROWS[pos]][COLS[pos]];}bool inBoard(int row,int col){return row>=0 && row<HEIGHT && col>=0 && col<WIDTH;}int main(){printf("HI Q OUTPUTn");for(int pos=0;pos<POS_NUM;pos++)POS_BOARD[ROWS[pos]][COLS[pos]]=pos;int caseNum;scanf("%d",&caseNum);while(caseNum--){Status board[HEIGHT][WIDTH];for(int row=0;row<HEIGHT;row++)for(int col=0;col<WIDTH;col++)board[row][col]=OUT;for(int pos=0;pos<POS_NUM;pos++)status(board,pos)=EMPTY;while(true){int pos;scanf("%d",&pos);if(!pos)break;status(board,pos-1)=TAKEN;}while(true){bool anyChange=false;for(int pos=POS_NUM-1;pos>=0;pos--){if(status(board,pos)!=EMPTY)continue;int row=ROWS[pos],col=COLS[pos];int posJumpFrom=NONE,posJumpMid=NONE;for(int dir=0;dir<DIR_NUM;dir++){int rowFrom=row+2*ROW_SHIFT[dir],colFrom=col+2*COL_SHIFT[dir];int rowMid=row+ROW_SHIFT[dir],colMid=col+COL_SHIFT[dir];if(inBoard(rowFrom,colFrom) && board[rowFrom][colFrom]==TAKEN && board[rowMid][colMid]==TAKEN){int posFrom=POS_BOARD[rowFrom][colFrom];if(posJumpFrom==NONE || posJumpFrom<posFrom){posJumpFrom=posFrom;posJumpMid=POS_BOARD[rowMid][colMid];}}}if(posJumpFrom!=NONE){status(board,posJumpFrom)=EMPTY;status(board,posJumpMid)=EMPTY;status(board,pos)=TAKEN;anyChange=true;break;}}if(!anyChange)break;}int result=0;for(int pos=0;pos<POS_NUM;pos++)if(status(board,pos)==TAKEN)result+=pos+1;printf("%dn",result);}printf("END OF OUTPUTn");return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号