題目大意:
乙個平面有三個積木塊攪成了一坨,問能不能通過平移把他們分開。
初二六個人討論出來的題解:
用深搜移動積木,判斷是否分開。
列舉:只需列舉兩個積木的移動,第三個積木的移動相當於另外兩個積木同時向同乙個方向移動。
判重:儲存正在列舉的兩個積木中,第乙個方塊的座標,用bool陣列判重。
判斷已經分開:當兩塊積木,乙個積木最右邊的方塊在另乙個積木最左邊的方塊的左邊時(很繞口),這兩個積木就是分開的。當三個積木處於兩兩分開的狀態時,就成功了(輸出1)
#include
#include
#include
using namespace std
;#define zero 11
#define maxn 22
#define right(a,b) (a+zero>=0&&b+zero>=0&&a+zero<=maxn&&b+zero<=maxn)
const int dd[4][2]=,,,};
int n1,n2,n3,l1,r1,u1,d1,l2,r2,u2,d2,l3,r3,u3,d3;
struct xy //座標結構體
b1[85],b2[85],b3[85];//三個積木塊
bool vis[maxn+1][maxn+1][maxn+1][maxn+1];//判重
bool map[maxn+1][maxn+1];
void input()
for(int i=1
;i<=n2;i++)
for(int i=1
;i<=n3;i++)
//l,r,u,d儲存的每個積木最左邊和最右邊和最上面和最下面的座標
}bool mark(xy a,xy b)
//用於判重並標記
bool check(xy a,xy b,xy c)
//判斷列舉的積木有沒有重疊
bool finish(xy a,xy b,xy c)
//判斷是否全部分開
int dfs(xy b,xy c)
}//移動第乙個積木
for(int i=0
;i<4;i++)
}//移動第二個積木
xy t1,t2;
for(int i=0
;i<4;i++)
}//同時移動兩個積木==移動第三個積木
return 0;}
int main()
12 組合模式
1.說明 請參見本文第一章 2.組合模式說明 組合模式 將物件組合成樹形介面以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件具有一致性。為了保持整體和區域性的一致性,整體和區域性具有相同的介面,從而避免判斷該節點是整體還是區域性。介面可以實現為空。使用範圍 在需求中體現部分與整...
第12組選題報告
組長部落格 存在一些競爭對手 這裡這裡 隊員比例 張凌昕2 孫承愷10 邱暢傑10 林星培12 餘琳玲15 林青霞12 王永福20 徐祖豪9 丁樞桐10 組號分數154 254348 452543.8 649.2757 848956.4 1052.2 1155.8 1248 平均分51.76 a 我...
第12組 每週小結 1 3 (組長)
展示github當日 文件簽入記錄 解決了哪些bug,又是如何解決的 需要寫詳細 1 解決了發布物品但是對方看不了的bug,原因是小程式中原來上傳是用chooseimage函式,上傳的是被暫時儲存在了本地,所以對方檢視不了。後來使用了雲端上傳的方法,把上傳到雲儲存裡面,最終實現了對方也能看到上傳的,...