poj_2339

解题思路:

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

当昨天的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;
	
}



你可能感兴趣的:(memcpy,矩阵,小游戏)