标签:游戏 int Cover tr dc Board 残缺 棋盘 tc
分支算法
题意描述:
在2^k * 2^k的正方形棋盘上有一个缺口,这里可以认为是已经被填充了,要求给出使用三角板去填满这个棋盘的方案
#include <iostream>
using namespace std;
int amount,Board[100][100];
void Cover(int tr,int tc,int dr,int dc,int size)
{
int s,t;
if(size<2)
return ;
amount++;
t=amount;
s=size/2;
if(dr<tr+s&&dc<tc+s)//残缺在左上角
{
//覆盖中间位置
Board[tr+s-1][tc+s]=t;
Board[tr+s][tc+s-1]=t;
Board[tr+s][tc+s]=t;
Cover(tr,tc,dr,dc,s);//覆盖左上
Cover(tr,tc+s,tr+s-1,tc+s,s);//覆盖右上
Cover(tr+s,tc,tr+s,tc+s-1,s);//覆盖左下
Cover(tr+s,tc+s,tr+s,tc+s,s);//覆盖右下
}
else if(dr<tr+s&&dc>=tc+s)//残缺在右上角
{
Board[tr+s-1][tc+s-1]=t;
Board[tr+s][tc+s-1]=t;
Board[tr+s][tc+s]=t;
Cover(tr,tc,tr+s-1,tc+s-1,s);
Cover(tr,tc+s,dr,dc,s);
Cover(tr+s,tc,tr+s,tc+s-1,s);
Cover(tr+s,tc+s,tr+s,tc+s,s);
}
else if(dr>=tr+s&&dc<tc+s)//残缺在左下
{
Board[tr+s-1][tc+s-1]=t;
Board[tr+s-1][tc+s]=t;
Board[tr+s][tc+s]=t;
Cover(tr,tc,tr+s-1,tc+s-1,s);
Cover(tr,tc+s,tr+s-1,tc+s,s);
Cover(tr+s,tc,dr,dc,s);
Cover(tr+s,tc+s,tr+s,tc+s,s);
}
else
{
Board[tr+s-1][tc+s-1]=t;
Board[tr+s-1][tc+s]=t;
Board[tr+s][tc+s-1]=t;
Cover(tr,tc,tr+s-1,tc+s-1,s);
Cover(tr,tc+s,tr+s-1,tc+s,s);
Cover(tr+s,tc,tr+s,tc+s-1,s);
Cover(tr+s,tc+s,dr,dc,s);
}
}
void Print(int s)
{
for(int i=1;i<=s;i++)
{
for(int j=1;j<=s;j++)
printf("%5d ",Board[i][j]);
printf("\n");
}
}
int main()
{
int s=1,k,x,y;
printf("输入2残缺棋盘的规模:2^k,k=");
scanf("%d",&k);
for(int i=1;i<=k;i++)
s*=2;
printf("输入棋盘残缺位置(x,y):");
scanf("%d%d",&x,&y);
Board[x][y]=0;
Cover(1,1,x,y,s);
Print(s);
return 0;
}
标签:游戏,int,Cover,tr,dc,Board,残缺,棋盘,tc 来源: https://www.cnblogs.com/sherkevin/p/16295148.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。