这只不会wfs的蒟蒻硬整了个高仿出来,可惜还是没过,一辈子都在KAKTUS,求好心大佬指点嘤嘤嘤
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
char map[52][52];
struct pos {
int x;
int y;
};
int hou=0,qian=0;
pos wat[2502],des,me[2502];;
int r,c;
bool zhang[52][52]= {1};
int t;//time
int head=1,tail=1;
bool reach;//是否到达
void spread();
void wfs();
int main() {
scanf("%d %d\n",&r,&c);
for(int i=1; i<=r; i++) {
for(int j=1; j<=c; j++) {
scanf("%c",&map[i][j]);
if(map[i][j]=='S') {
me[tail].x=i;
me[tail].y=j;
tail=(tail+1)%2503;
zhang[i][j]=0;
} else if(map[i][j]=='D') {
des.x=i;
des.y=j;
zhang[i][j]=0;
} else if(map[i][j]=='.') {
zhang[i][j]=0;
} else if(map[i][j]=='*') {
wat[qian].x=i;
wat[qian].y=j;
qian=(qian+1)%2053;
}
}
}
while(head!=tail&&!reach) {
t++;
wfs();
spread();
}
if(reach)printf("%d",t);
else printf("KAKTUS");
return 0;
}
void wfs() {
int i=head;
head=tail;
for(; i<head; i++) {
if(zhang[me[i].x][me[i].y])continue;
else zhang[me[i].x][me[i].y]=1;
if(!zhang[me[i].x+1][me[i].y]) {
me[tail].x=me[i].x+1;
me[tail].y=me[i].y;
if(me[tail].x==des.x&&me[tail].y==des.y) {
reach=true;
break;
}
tail=(tail+1)%2503;
}
if(!zhang[me[i].x-1][me[i].y]) {
me[tail].x=me[i].x-1;
me[tail].y=me[i].y;
if(me[tail].x==des.x&&me[tail].y==des.y) {
reach=true;
break;
}
tail=(tail+1)%2503;
}
if(!zhang[me[i].x][me[i].y-1]) {
me[tail].x=me[i].x;
me[tail].y=me[i].y-1;
if(me[tail].x==des.x&&me[tail].y==des.y) {
reach=true;
break;
}
tail=(tail+1)%2503;
}
if(!zhang[me[i].x][me[i].y+1]) {
me[tail].x=me[i].x;
me[tail].y=me[i].y+1;
if(me[tail].x==des.x&&me[tail].y==des.y) {
reach=true;
break;
}
tail=(tail+1)%2503;
}
}
}
void spread() {
int i=hou;
hou=qian;
for(; i<head; i++) {
if(!zhang[wat[i].x+1][wat[i].y]) {
wat[qian].x=wat[i].x+1;
wat[qian].y=wat[i].y;
zhang[wat[qian].x][wat[qian].y]=1;
qian=(qian+1)%2503;
}
if(!zhang[wat[i].x-1][wat[i].y]) {
wat[qian].x=wat[i].x-1;
wat[qian].y=wat[i].y;
zhang[wat[qian].x][wat[qian].y]=1;
qian=(qian+1)%2503;
}
if(!zhang[wat[i].x][wat[i].y-1]) {
wat[qian].x=wat[i].x;
wat[qian].y=wat[i].y-1;
zhang[wat[qian].x][wat[qian].y]=1;
qian=(qian+1)%2503;
}
if(!zhang[wat[i].x][wat[i].y+1]) {
wat[qian].x=wat[i].x;
wat[qian].y=wat[i].y+1;
zhang[wat[qian].x][wat[qian].y]=1;
qian=(qian+1)%2503;
}
}
}