回复 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; }