生活随笔
收集整理的這篇文章主要介紹了
【分治算法-02】算法经典问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法經典問題
棋盤覆蓋問題
問題描述:
自我理解:對于僅存在一個奇異點,想到奇異點的填充肯定可以通過一個“L”形狀構成一個正方形。我們可以通過不斷縮小方格尺寸(我們的目標是每一個縮小尺寸到4?4的小方格中都有一個“認為規定的奇異點,這些相連奇異點同時也能構成一個"L“形狀,但也可以想成是我們之前通過"L"模型劃分的”人為奇異點“),因為之可能存在有限種情況。不好分析L的擺放模式,但是我們可以構造”奇異點“。全部分清奇異點存在的種類,然后再通過”L“形去填充這些空白的”格子“。受到啟發于這個寶藏博客”棋盤覆蓋問題的圖形解答“
#include <stdio.h>
#define MaxValue 100
void chessboard(int tx
,int ty
,int x
,int y
,ing size
)
{int s
=gupai
++;int mid
= size
/2;if(size
==1)return;if(tx
<x
+mid
&& ty
<y
+mid
){chessboard(tx
,ty
,x
,y
,mid
);}else{QiPan
[x
+mid
-1][y
+mid
-1] = s
;chessboard(tx
+mid
-1,ty
+mid
-1,x
,y
,mid
);}if((tx
<x
+mid
) && (ty
>=y
+mid
)){chessboard(tx
,ty
,x
,y
+mid
,mid
);}else{QiPan
[x
+mid
-1][y
+mid
] = s
;chessboard(x
+mid
-1,y
+mid
,x
,y
+mid
,mid
);}if(tx
>=x
+mid
&&ty
<y
+mid
){chessboard(tx
,ty
,x
+mid
,y
,mid
);}else{QiPan
[x
+mid
][y
+mid
-1] = s
;chessboard(x
+mid
,y
+mid
-1,x
+mid
,y
,mid
);}if((tx
>=x
+mid
)&&(ty
>=y
+mid
)){chessboard(tx
,ty
,x
+mid
,y
+mid
,mid
);}else {QiPan
[x
+mid
][y
+mid
] = s
;chessboard(x
+mid
,x
+mid
,x
+mid
,y
+mid
,mid
);}
int main
()
{int tx
,ty
,x
=0,y
=0,size
;int QiPan
[MaxValue
][MaxValue
];int gupai
=0;scanf("%d %d %d",&tx
,&ty
,&size
);chessboard(tx
,ty
,x
,y
,size
);
}
總結
以上是生活随笔為你收集整理的【分治算法-02】算法经典问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。