求求大佬,救救蒟蒻!
查看原帖
求求大佬,救救蒟蒻!
262942
Bonfire_Lit楼主2020/8/12 09:04

这只不会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;
		}
	}
}
2020/8/12 09:04
加载中...