16:矩阵剪刀石头布

时间:2022-05-07
本文章向大家介绍16:矩阵剪刀石头布,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

16:矩阵剪刀石头布

总时间限制: 5000ms 内存限制: 65536kB描述

Bart的妹妹Lisa在一个二维矩阵上创造了新的文明。矩阵上每个位置被三种生命形式之一占据:石头,剪刀,布。每天,上下左右相邻的不同生命形式将会发生战斗。在战斗中,石头永远胜剪刀,剪刀永远胜布,布永远胜石头。每一天结束之后,败者的领地将被胜者占领。

你的工作是计算出n天之后矩阵的占据情况。

输入第一行包含三个正整数r,c,n,分别表示矩阵的行数、列数以及天数。每个整数均不超过100。 接下来r行,每行c个字符,描述矩阵初始时被占据的情况。每个位置上的字符只能是R,S,P三者之一,分别代表石头,剪刀,布。相邻字符之间无空格。输出输出n天之后的矩阵占据情况。每个位置上的字符只能是R,S,P三者之一,相邻字符之间无空格。样例输入

3 3 1
RRR
RSR
RRR

样例输出

RRR
RRR
RRR

来源Waterloo local 2003.01.25

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 
 6 char a[110][110],b[110][110];
 7 int n,m,t;
 8 
 9 int main()
10 {
11 cin >> n >> m >> t;
12 for(int i=1;i<=n;i++)
13 for(int j=1;j<=m;j++)
14 {
15 cin>>a[i][j];
16 b[i][j]=a[i][j];
17 }
18 for(int k=1;k<=t;k++)
19 {
20 for(int i=1;i<=n;i++)
21 for(int j=1;j<=m;j++)
22 {
23 if(a[i][j]=='R')
24 {
25 if(a[i-1][j]=='S')b[i-1][j]='R';
26 if(a[i+1][j]=='S')b[i+1][j]='R';
27 if(a[i][j-1]=='S')b[i][j-1]='R';
28 if(a[i][j+1]=='S')b[i][j+1]='R';
29 }
30 if(a[i][j]=='S')
31 {
32 if(a[i-1][j]=='P')b[i-1][j]='S';
33 if(a[i+1][j]=='P')b[i+1][j]='S';
34 if(a[i][j-1]=='P')b[i][j-1]='S';
35 if(a[i][j+1]=='P')b[i][j+1]='S';
36 }
37 if(a[i][j]=='P')
38 {
39 if(a[i-1][j]=='R')b[i-1][j]='P';
40 if(a[i+1][j]=='R')b[i+1][j]='P';
41 if(a[i][j-1]=='R')b[i][j-1]='P';
42 if(a[i][j+1]=='R')b[i][j+1]='P';
43 }
44 }
45 for(int i=1;i<=n;i++)
46 for(int j=1;j<=m;j++)
47 a[i][j]=b[i][j];
48 }
49 for(int i=1;i<=n;i++)
50 {
51 for(int j=1;j<=m;j++)
52 cout << b[i][j];
53 cout << "n";
54 }
55 return 0;
56 }