您的位置:首页 > 其它

poj_2339

2015-12-07 00:53 218 查看
解题思路:

利用两个矩阵,一个存储昨天,一个存储今天。

当昨天的S旁边为P的时候,就在今天的矩阵中将P改成S,其他情况,依次类推。

注意的是每更新一次就要把更新后的矩阵当做昨天的矩阵,然后赋值给今天,在进行新的循环

/*
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
*/
#include<iostream>
using namespace std;
int t,r,k,c,n,i,j;
char Y[120][120],T[120][120];
void doit(int i,int j,int ii,int jj)
{
if(i<0||i>r||j<0||j>c||ii<0||ii>r||jj>c||jj<0)
return ;
if(Y[i][j]=='R'&&T[ii][jj]=='S')	T[ii][jj]='R';
if(Y[i][j]=='S'&&T[ii][jj]=='P')	T[ii][jj]='S';
if(Y[i][j]=='P'&&T[ii][jj]=='R')	T[ii][jj]='P';

}
int main()
{
cin>>t;
while(t--)
{
cin>>r>>c>>n;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
cin>>Y[i][j];
for (i=0;i<n;i++) {
memcpy(T,Y,sizeof(T));//memcpy()是复制函数,void *memcpy( void *dest, const void *src, size_t count );不仅仅是字符串
for (j=0;j<r;j++) for (k=0;k<c;k++) {
doit(j,k,j+1,k);
doit(j,k,j-1,k);
doit(j,k,j,k+1);
doit(j,k,j,k-1);
}
memcpy(Y,T,sizeof(T));
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(j==c-1)
cout<<T[i][j]<<endl;
else
cout<<T[i][j];
}

}

}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: