POJ 2339
来源:互联网 发布:怎样提升淘宝等级 编辑:程序博客网 时间:2024/05/29 03:18
题目链接:http://poj.org/problem?id=2339
题目大概意思就是说,给你一个二维的矩阵,每个单元里面存放一个字符,该字符来自R、S、P,水平或者垂直方向相邻的单元格,如果存放的字符不相同,就会进行战争,每场战争中R赢S,S赢P,P赢R(类似于平时我们玩的石头、剪刀、布的游戏),现在给你一个二维矩阵,问你n天过后,这个二维矩阵里面存放的状态。
这是一个简单的模拟题目,让程序来进行相应的模拟,每步需要判断该位置的上下左右是否有能赢该字符的字符,如果有,则进行替换,没有,则什么都不用做,由于题目中说了,今天赢了的状态,必须到了明天才清楚,所以你需要维持相邻两天的状态,由于进行模拟的过程中,需要判断下标值是否越界的问题,我就将数组下标从一开始,便于处理,这题都没什么说的,代码里见真章吧:
#include<cstdio>#include<algorithm>#define MAX_N 110char maze[2][MAX_N][MAX_N];char hash[MAX_N];int main(){ int t; hash['R'] = 'P',hash['S']='R',hash['P']='S'; scanf("%d",&t); while(t--) { int r,c,n,cur = 0; scanf("%d%d%d",&r,&c,&n); for(int i=1;i<=r;++i) scanf("%s",&maze[cur][i][0]+1); for(int i=0;i!=n;++i) { for(int j=1;j<=r;++j) { for(int k=1;k<=c;++k) { //得到能赢该字符的字符 char temp = hash[maze[cur][j][k]]; //判断它的四个方向是否存在该字符,如果有,就改为能赢他的字符,没有,什么都不做 if(maze[cur][j-1][k]==temp||maze[cur][j][k-1]==temp||maze[cur][j+1][k]==temp||maze[cur][j][k+1]==temp) maze[cur^1][j][k] = temp; else maze[cur^1][j][k] = maze[cur][j][k]; } } cur ^=1; } for(int i=1;i<=r;++i) printf("%s\n",&maze[cur][i][0]+1); printf("\n"); } return 0;}
- POJ 2339
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- Optimizing Graphics Performance (iOS)
- hibernate的一级缓存和二级缓存
- hdu 3336 Count the string(记忆化搜索)
- PCL编程-法向量计算
- 几种有趣的不常见排序
- POJ 2339
- Your build settings specify a provisioning profile with the UUID, no provisioning profile was found
- 排序算法--插入排序(直接插入排序、希尔排序)Java实现
- 迭代法解线性方程
- POJ 2069 super star(三维点集最小圆覆盖 模拟退火)
- Android 中关于Cursor类的介绍
- 利用HorizontalScrollView加Viewpager实现多个的导航标题栏
- 叉姐的魔法训练(第一课)---- 初级魔法练习
- gcc 编译动态库和静态库