请教一个关于二维数组的算法

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:20:20
在下面这样一个6×9二维数组中,需要找出满足{1,1,4,1,1}这样排列的组合来,记录它们的坐标。

int Array[6][9] =
{
{1,1,0,1,0,0,1,0,0},
{4,1,1,0,0,0,1,4,0},
{4,0,0,1,1,4,4,1,0},
{0,0,0,0,0,1,0,1,0},
{0,0,1,1,4,1,0,1,0},
{0,0,0,0,4,0,0,0,0},
};

算法越简单越好,能有具体代码更好,我会追加积分的,多谢各位~~
谢谢各位,忘记说清楚了,需要这5个数相连,顺序满足1,1,4,1,1,只能横竖相连,不能斜线相连,

如果仅仅对于6×9这么小的矩阵来说,可以直接循环寻找各个方向的匹配,源代码如下:

#include <cstdio>
#include <cstring>
using namespace std;

int Array[6][9] =
{
{1,1,0,1,0,0,1,0,0},
{4,1,1,0,0,0,1,4,0},
{4,0,0,1,1,4,4,1,0},
{0,0,0,0,0,1,0,1,0},
{0,0,1,1,4,1,0,1,0},
{0,0,0,0,4,0,0,0,0},
};

int mo[5] = {1,1,4,1,1};

bool check_right(int a,int b) //右方向
{
int i;
for (i=0;i<5;i++) if (b + i >= 9) return false;
else if (Array[a][b + i] != mo[i]) return false;
return true;
}

bool check_down(int a,int b) //下方向
{
int i;
for (i=0;i<5;i++) if (a + i >= 6) return false;
else if (Array[a + i][b] != mo[i]) return false;
return true;
}

bool check_left_down(int a,int b) //左下方向
{
int i;
for (i=0;i<5;i++) if (a + i >= 6 || b - i < 0) return false;
else if (Array[a + i][b - i] != mo[i]) retu