您的位置:首页 > 编程语言 > C语言/C++

#1094 : Lost in the City 找到几个当年c语言留下的坑

2016-06-08 00:00 477 查看
思路很简单

对于Hi对象的3x3格子,我们需要存储9个位置。我们将九宫格中的中心2x2位置的单独拿出来做判断,若2x2位置的符合,再去匹配其他8个位置。

由于Hi对象可以旋转,因此,对于这8个位置需要用一个一维数组存储八个位置。

在进行遍历操作的时候,需要判断m数组的值是否满足地图数组a的值,并且将a中值旋转的四种状态都要做判断。

当然,做函数式处理,也是很重要的。

//解决的c语言坑见评论

代码如下:

void BuildHi(char** Lhi, char* m1){
m1[0] = Lhi[0][0];
m1[1] = Lhi[0][1];
m1[2] = Lhi[0][2];
m1[3] = Lhi[1][2];

m1[4] = Lhi[2][2];
m1[5] = Lhi[2][1];
m1[6] = Lhi[2][0];
m1[7] = Lhi[1][0];
}

bool FixedPosition(int i,int j,char**a,char* m1){

if (a[i - 1][j - 1] == m1[0] && a[i-1][j] == m1[1] && a[i-1][j+1] == m1[2]
&& a[i][j+1] == m1[3] &&a[i+1][j+1] == m1[4] &&a[i+1][j] == m1[5] &&
a[i+1][j-1] ==m1[6] && a[i][j-1] == m1[7]){
return true;
}

if (a[i - 1][j - 1] == m1[6] && a[i - 1][j] == m1[7] && a[i - 1][j + 1] == m1[0]
&& a[i][j + 1] == m1[1] && a[i + 1][j + 1] == m1[2] && a[i + 1][j] == m1[3] &&
a[i + 1][j - 1] == m1[4] && a[i][j - 1] == m1[5]){
return true;
}

if (a[i - 1][j - 1] == m1[4] && a[i - 1][j] == m1[5] && a[i - 1][j + 1] == m1[6]
&& a[i][j + 1] == m1[7] && a[i + 1][j + 1] == m1[0] && a[i + 1][j] == m1[1] &&
a[i + 1][j - 1] == m1[2] && a[i][j - 1] == m1[3]){
return true;
}

if (a[i - 1][j - 1] == m1[2] && a[i - 1][j] == m1[3] && a[i - 1][j + 1] == m1[4]
&& a[i][j + 1] == m1[5] && a[i + 1][j + 1] == m1[6] && a[i + 1][j] == m1[7] &&
a[i + 1][j - 1] == m1[0] && a[i][j - 1] == m1[1]){
return true;
}

return false;
}

void LittleHi(){
int m, n;
int hi = 3;
//	char Lhi[3][3];//所在位置矩阵
char m1[8];	//记录两个旋转矩阵
scanf("%d%d", &m, &n);
char **Lhi = (char**)malloc(sizeof(char*) * 3);
for (int i = 0; i < 3; ++i){//为每行分配4个大小空间
Lhi[i] = (char*)malloc(sizeof(char) * 3);
}

//a is map
char **a = (char**)malloc(sizeof(char*) * m);//为二维数组分配m行
for (int i = 0; i < m; ++i){//为每行分配4个大小空间
a[i] = (char*)malloc(sizeof(char) * n);
}

for (int i = 0; i < m; i++)
{
scanf("%s",&a[i][0]);
//a[i][j]=getchar();
}
fflush(stdin);
//Lhi自身有四种状态
for (int i = 0; i < hi; i++)
{
scanf("%s", &Lhi[i][0]);
//Lhi[i][j] = getchar();
}

BuildHi(Lhi, m1);

//遍历匹配 m行 n列
for (int i = 1; i < m-1; i++)
{
for (int j = 1; j < n-1; j++)
{
//表示中间单元格相等
if (a[i][j] == Lhi[1][1]){
if (FixedPosition(i, j, a, m1)){
cout << i+1 << " " << j+1 << endl;
}
}
}
}
}

int _tmain(int argc, _TCHAR* argv[])
{
LittleHi();
return 0;
}


//指针问题

int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int *b = &a;
//b = &a;
a++;
printf("%d\n",*b);
printf("%d\n",a);
return 0;
}

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