poj 2339 Rock, Scissors, Paper

来源:互联网 发布:淘宝c店和天猫的区别 编辑:程序博客网 时间:2024/05/23 01:25
//开始做这一题的时候,读题都读了很久,完全没有读懂,感觉这一题也出得太烂了,题意的疑点成千上万,让人无从下手!//最后只有看别人的解题报告才知道!题意:在一个二维方格中,有三种物种:P,S,R 他们会互相进行攻击,P可以打败R,S可//打败P,R可打败S,他们每天都会发生战争,别打败的物种的方格会别打胜的物种霸占,问经过n天之后,方格上的物种位置情况如何!//这一题需要注意的是: 他们战斗的结果是在夜晚才进行汇总的,在白天的时候,战斗一直都是在那个方格上,他们的位置不会是一//经过战斗就发生改变的! 这就需要开二个二维的数组进行方格位置的储存了!一个是用来战斗时使用的位置方格,一个是用来战斗时//临时结果的位置方格储存!例如第二个案例:grid数组就储存方格位置 ,而tmp数组就储存临时方格位置!第一天的战斗依据就是grid数组//这一整天它的方格上的位置都没有改变,而tmp数组就是对每一次的战斗结果的储存! #include <iostream>#include <string>using namespace std;char grid[110][110];//储存战斗的依据 char tmp[110][110];//储存战斗的临时结果 int main(){    int tc, r, c, n, i, j;    cin >> tc;    while (tc--)    {          cin >> r >> c >> n;          for (i = 1; i <= r; i++)            for (j = 1; j <= c; j++)            {                cin >> grid[i][j];                tmp[i][j] = grid[i][j];            }                    while (n--)          {                //每一天的战斗,依据是grid数组的储存,结果是储存在tmp数组中                 for (i = 1; i <= r; i++)                {                   for (j = 1; j<= c; j++)                   {                       if (grid[i][j] == 'R')                       {                           if (i-1 > 0 && grid[i-1][j] == 'S')                               tmp[i-1][j] = 'R';                           if (j-1 > 0 && grid[i][j-1] == 'S')                               tmp[i][j-1] = 'R';                           if (i+1 <= r && grid[i+1][j] == 'S')                               tmp[i+1][j] = 'R';                           if (j+1 <= c && grid[i][j+1] == 'S')                               tmp[i][j+1] = 'R';                       }                       else if (grid[i][j] == 'S')                       {                            if (i-1 > 0 && grid[i-1][j] == 'P')                               tmp[i-1][j] = 'S';                            if (j-1 > 0 && grid[i][j-1] == 'P')                               tmp[i][j-1] = 'S';                            if (i+1 <= r && grid[i+1][j] == 'P')                               tmp[i+1][j] = 'S';                            if (j+1 <= c && grid[i][j+1] == 'P')                               tmp[i][j+1] = 'S';                       }                       else if (grid[i][j] == 'P')                       {                            if (i-1 > 0 && grid[i-1][j] == 'R')                               tmp[i-1][j] = 'P';                            if (j-1 > 0 && grid[i][j-1] == 'R')                               tmp[i][j-1] = 'P';                            if (i+1 <= r && grid[i+1][j] == 'R')                               tmp[i+1][j] = 'P';                            if (j+1 <= c && grid[i][j+1] == 'R')                               tmp[i][j+1] = 'P';                       }                   }                }                                      //每一天的战斗结束之后,就进行战斗结果的汇总,最后赋值给grid数组!                    for (i = 1; i <= r; i++)                      for (j = 1; j <= c; j++)                          grid[i][j] = tmp[i][j];          }                    for (i = 1; i <= r; i++)          {             for (j = 1; j <= c; j++)                 cout << grid[i][j];             cout << endl;          }          if (tc != 0)             cout << endl;    }        system("pause");}

原创粉丝点击