回复 14楼 jack10141
是的,用递归回溯做这道题确实不是很好,即使不奔溃也要超时,时间限制为1s。你可以用我现在正在写的框架试试:
程序代码:
#include <stdio.h>
#define MAXL 20//定义了block二维数组的最大值为20*20的矩阵
int blackcount=0,blackcounterd[MAXL][MAXL]={0};//blackcount为记录有几个连通块,blackcounter为标记
void search_pieces(int x[MAXL],int y[MAXL],int block[MAXL][MAXL],int pieces[MAXL],int m,int n)//查找连通块
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
}
void put_pieces(int x[MAXL],int y[MAXL],int block[MAXL][MAXL],int pieces[MAXL],int m)//摆放棋子
{
int i;
for(i=0;i<m;i++)
block[x[i]][y[i]]=pieces[i];//将棋子的值赋给棋盘
}
void main()
{
int x[MAXL],y[MAXL],block[MAXL][MAXL],pieces[MAXL],i,j,n,m;//block为棋盘,i,j为循环用,x,y为坐标。
scanf("%d %d",&n,&m);//n为用户定义数组的大小,m为共放了几个棋子
for(i=0;i<n;i++)
for(j=0;j<n;j++)
block[i][j]=-1;//将棋盘全部赋给-1值,因为0是白棋,1是黑棋
for(i=0;i<n;i++)
scanf("%d %d %d %d",&pieces[i],&x[i],&y[i]);//输入棋子的颜色,坐标
put_pieces(x,y,block,pieces,m);//将坐标,棋盘,颜色,基本信息,传入摆放棋子函数中
search_pieces(x,y,block,pieces,m,n);//search_pieces为查找棋子有几个连通块
}