分裂算法(SA)算法框架(自制)
2023-02-19 22:18 作者:博學(xué)不精的玉子 | 我要投稿
主體結(jié)構(gòu)為在一個長x,寬y的長方形中發(fā)射xy/2個SA,每個SA會增加total,并往原地放一個SAL,每個SAL會向四周擴散并把原地變成墻,直到?jīng)]有空位置。
該框架適用于一本通1329.細胞、1249.Lake Counting等
也可以在SAL中加入元素“j”,即可適用于1252.走迷宮等
#include<bits/stdc++.h>
using namespace std;
int a[10001][10001]={0},i,j,total;
void sal(int x,int y){
if(x,y在邊框內(nèi)||a[x][y]=墻) return;
else a[x][y]=墻;
sal(x+1,y,i+1),sal(x,y+1,i+1),sal(x-1,y,i+1),sal(x,y-1,i+1);
}
void sa(int x,int y){
if(x,y在邊框內(nèi)||a[x][y]=='#') return;
total++;
sal(x,y,1);
}
int main(){
cin>>邊框x>>邊框y;
for(i=1;i<=邊框x;i+2)
for(j=1;j<=邊框y;j+2)
cin>>a[i][j];
for(i=1;i<=邊框x;i+2)
for(j=1;j<=邊框y;j+2)
sa(i,j);
cout<<total<<endl;
return 0;
}