题干:一个10*10的棋盘上下了某些棋子,若棋子的上下左右有棋子,则这些棋子被称为一个块,求一种算法,得到棋盘上有几个块。
我这种思路是使用递归求解
思路就是
1.棋盘上的每一个点有两个标志位,一个代表是否有棋子,一个代表是否遍历过。
2.遍历棋盘上每一个点,遍历之前先把当前点的遍历状态置成遍历过。
3.若上下左右有棋子就递归,而后把当前点的棋子删掉。
4.最后遍历棋盘上还剩几个棋子,就是几个块。
代码如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/sysinfo.h>
#include <unistd.h>
#include <sched.h>
#include <ctype.h>
#define FIRST 1
#define SECOND 2
#define MAX_LENGTH 10
struct xyStruct
{
int x;
int y;
};
#if 1
int buf[MAX_LENGTH][MAX_LENGTH] = {
{1,1,1,0,0,1,1,1,0,0},
{1,1,1,0,0,1,0,1,0,0},
{0,0,0,0,0,1,1,1,0,0},
{0,0,1,1,0,0,0,0,0,0},
{0,0,1,0,1,1,