为2048的游戏写一个算法,输入一个元素只能为0,2或4的二维数组和一个操作,字符wsad代替上下左右,时间复杂度越小起好。(不用随机产生2和4)如,
输入:
0 0 2 2
2 0 0 0
0 0 0 0
4 4 2 2
a
输出:
4 0 0 0
2 0 0 0
0 0 0 0
8 4 0 0
下面这段代码如何更改才能实现?
#include
void main()
{
char turn ;
int s[4][4];
int a[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int i,j;
int q=0;
int e=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",s[i][j]);
}
}
scanf("%c",&turn);
switch(turn)
{
case 'w':
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(s[i][j]==s[i][j+1])
{
a[q][e]=s[i][j]+s[i][j+1];
e++;
j++;
}
else
{
a[i][j]=s[i][j];
}
}
}
break;
}
case 's':
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(s[i][j]==s[i][j+1])
{
e=3;
a[q][e]=s[i][j]+s[i][j+1];
e--;
j++;
}
else
{
a[i][j]=s[i][j];
}
}
}
break;
}
case 'a':
{
for(j=0;j<4;i++)
{
for(i=0;i<4;j++)
{
if(s[i][j]==s[i+1][j])
{
a[q][e]=s[i][j]+s[i+1][j];
q++;
i++;
}
else
{
a[i][j]=s[i][j];
}
}
}
break;
}
case 'd':
{
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
if(s[i][j]==s[i+1][j])
{
q=3;
a[q][e]=s[i][j]+s[i+1][j];
q--;
i++;
}
else
{
a[i][j]=s[i][j];
}
break;
}
}
break;
}
default:
printf("输入无效");
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",a[i][j]);
}
}
}