广度优先搜索-连连看

广度优先搜索:

连连看

#include <stdio.h>
#include <string.h>

char aa[6*6+1]={"ABF...CE....D....$..#.%D....EC...FBA"}; // %,#为阻挡
//    0 1 2 3 4 5
// 0  A B F . . .
// 1  C E . . . .
// 2  D . . . . #
// 3  . . % . $ D
// 4  . . . . E C 
// 5  . . . F B A

int biaoji[6*6];  
int que[6*6];   // 队列,存放待搜索节点
int pos[4][2]={0,1,1,0,-1,0,0,-1};

int bfs(char *aa, int x,  int y)
{
	int s=0;  // 队列开始
	int e=0;  // 队列结尾
	
	que[s]=x*6+y;
	memset(biaoji, 0, sizeof(int)*6*6);
	biaoji[x*6 + y]=1;
	while (s<=e) // 队列中还有数
	{
		int x0 = que[s]/6;
		int y0 = que[s]%6;
		int m;
		for (m=0; m<4; m++)
		{
			int x1=x0+pos[m][0];
			int y1=y0+pos[m][1];
			if (x1>=0 && x1<6 &&
				y1>=0 && y1<6 &&
				biaoji[x1*6 + y1] ==0 &&
				(aa[x1*6+y1]=='.' || aa[x1*6+y1]==aa[x*6+y]) )
			{
				biaoji[x1*6 + y1]=1;
				if ( aa[x1*6+y1]==aa[x*6+y])	// 如果找到配对的点
				{
					printf("%c : (%d,%d)-(%d,%d)\n", aa[que[0]], x,y, x1, y1);
					aa[x1*6+y1]='.';
					aa[x*6+y]='.';
					return 1;
				}
				e++;
				que[e]=x1*6+y1;

			}
			///
		}
		s++;
	}
	return 0;
	
}

int main()
{

	int i,j;

	int x=0;
	while (x<6)   // 成功找出6个字母才结束循环
	{
		for (i=0; i<6; i++)
		{
			for (j=0; j<6; j++)
			{
				if (aa[i*6+j] !='.')
				{
					int u=bfs(aa,i,j);
					x+=u;
				}
			}
		}

	}

	char ch;
	ch=getchar();
	return 0;
}



将阻挡去掉:

char aa[6*6+1]={"ABF...CE....D..........D....EC...FBA"}; // %,#为阻挡
//    0 1 2 3 4 5
// 0  A B F . . .
// 1  C E . . . .
// 2  D . . . . .
// 3  . . . . . D
// 4  . . . . E C 
// 5  . . . F B A

结果为:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值