即求解在三维空间中从一个点到另一个的最短距离
传送门:Jelly
题意:在n * n * n的三维空间中每个点上都有一个好果冻或一个坏果冻。计算在不吃坏果冻的前提下,从(1,1,1)到(n,n,n)最少需要吃多少好果冻。
做法:每个有好果冻的点与上下左右前后有好果冻的点有可达边。用spfa即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn=110;
const int inf=0x3f3f3f3f;
char g[maxn][maxn][maxn];
bool vis[maxn][maxn][maxn];
int d[maxn][maxn][maxn];
int X[]={
1,-1,0,0,0,0};
int Y[]={
0,0,1,-1,0,0};
int Z[]={
0,0,0,0,1,-1};
int n;
bool check(int x,int y,int z){
if((0<x&&x<=n&&0<y&&y<=n&&0<z&&z<=n))
return true;
else return false;
}
struct ac{
int x,y,z;int d;
};
int inq[maxn][maxn][maxn];
void SPFA(){
memset(inq,false,sizeof inq);
memset(d,0x3f,sizeof d);
queue<ac> Q;
Q.push((ac){
1,1,1,1});
inq[1]