回复 10楼 BlueGuy
额、我是按照平时做题的格式写的,没写过实际项目,自己感觉还是能看吧。。

程序代码:#include<stdio.h>
////
//map : 待检测数组,函数将直接按条件修改此数组
//width : map的宽
//height : map的高
//condition : 修改条件,函数将对在行或列上大于等于条件的连续值赋为-1
////
void removeTiles(int * map, int width, int height, int condition)
{
int * mark, i, j, k, map_index;
mark = (int *)malloc(width * height * sizeof(int));
for(i = 0; i < height; i++)
for(j = 0; j < width; j++)
{
map_index = i * width + j;
mark[map_index] = 1;
for(k = i - 1; k >= 0 && map[map_index] == map[k * width + j]; k--) mark[map_index]++; //检测上侧
for(k = i + 1; k < height && map[map_index] == map[k * width + j]; k++) mark[map_index]++; //检测下侧
if(mark[map_index] >= condition) continue;
mark[map_index] = 1;
for(k = j - 1; k >= 0 && map[map_index] == map[map_index - j + k]; k--) mark[map_index]++; //检测左侧
for(k = j + 1; k < width && map[map_index] == map[map_index - j + k]; k++) mark[map_index]++; //检测右侧
}
for(i = 0, j = width * height; i < j; i++)
if(mark[i] >= condition) map[i] = -1;
free(mark);
}
int main()
{
int a[4][5] = {
{7, 7, 3, 4, 5},
{2, 7, 7, 7, 10},
{7, 7, 7, 14, 15},
{7, 7, 7, 7, 7}
};
int i, j;
removeTiles(a[0], 5, 4, 3);
for(i = 0; i < 4; i++, putchar('\n'))
for(j = 0; j < 5; j++) printf("%5d", a[i][j]);
return 0;
}
