棋盘覆盖问题

#include <iostream>
#include <stdlib.h>
int  board[100][100],tile=1;

void  ff(int tr,int tc,int dr,int dc,int t)
 {
 if(dr>tr&&dc>tc)
  {
  board[tr][tc]=t;
  board[tr][tc+1]=t;
  board[tr+1][tc]=t;
  }
 if(tr<dr&&dc==tc)
  {
   board[tr][tc]=t;
   board[tr][tc+1]=t;
   board[tr+1][tc+1]=t;
  }
 
  if(tr==dr&&tc<dc)
  {
   board[tr][tc]=t;
   board[tr+1][tc]=t;
   board[tr+1][tc+1]=t;
  }  

if(tr==dr&&dc==tc)
  {
   board[tr][tc+1]=t;
   board[tr+1][tc]=t;
   board[tr+1][tc+1]=t;
  }

 }

 void  chess(int tr,int tc,int dr,int dc,int size)
  {
    int s=size/2;
    int t=tile++;
    if(s==1)  {ff(tr,tc,dr,dc,t);return;}
    if(dr<tr+s&&dc<tc+s)
      chess(tr,tc,dr,dc,s);
    else
     {
      board[tr+s-1][tc+s-1]=t;
      chess(tr,tc,tr+s-1,tc+s-1,s);    
     } 
   
    if(dr<tr+s&&dc>=tc+s)
      chess(tr,tc+s,dr,dc,s);
    else
     {
      board[tr+s-1][tc+s]=t;
      chess(tr,tc+s,tr+s-1,tc+s,s);    
     } 
     
      if(dr>=tr+s&&dc<tc+s)
      chess(tr+s,tc,dr,dc,s);
    else
     {
      board[tr+s][tc+s-1]=t;
      chess(tr+s,tc,tr+s,tc+s-1,s);    
     }  
    
     if(dr>=tr+s&&dc>=tc+s)
      chess(tr+s,tc+s,dr,dc,s);
    else
     {
      board[tr+s][tc+s]=t;
      chess(tr+s,tc+s,tr+s,tc+s,s);    
     }  
 
 }
 


int main(int argc, char *argv[])
{
 int n;
 int i,j,dr,dc;
 cout<<"请输入棋盘长度:"<<endl;
 cin>>n;
 cout<<"请输入特殊方格的坐标:"<<endl;
 cin>>dr>>dc;
 chess(0,0,dr,dc,n);
 
 for(i=0;i<n;i++)
  {
   for(j=0;j<n;j++)
     cout<<board[i][j]<<"   ";
     cout<<endl;
   } 
 
 
  system("PAUSE"); 
  return 0;
}

这是我们校选课上的一个题目,利用分治算法去解棋盘覆盖问题算是最简单的办法吧。在还没加入校队前就看到过这个题目,当时

真的有种没法入手,也许那时真的什么都不懂吧,根本也没想过到底怎么入手。自从加入校队,每天集训,感觉好忙,每次上完课

回来总感觉收获满满,现在感觉从每一个算法开始,开始深入学习,才发现自己的很多东西学的很烂,还得慢慢补上去。每天学了

好多东西,总感觉时间太少,没时间把它们马上变成自己的程序,先慢慢写着吧,想想以后要做的事可多了。只不过确实有点忙

了,全是本学期的意料之外的,校队是意外,连学校的项目也是的,项目还在准备阶段,但我想我们组会在规定的时间内搞定,顺

利完成答辩。忙点,加油咯。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值