题意:有一个三维空间,从(x,y,z)的信号可以传输到(x+1,y,z),(x,y+1,z),(x,y,z+1)现在有一些是坏的,就是不能用的然后问你里面有多少个关键点。关键点就是,如果这个坏了,会改变原来的传输信号的过程。假设原来(x,y,z)能够传输到(x1,y1,z1),但是由于坏了(x2,y2,z2),导致不能传输了,就说(x2,y2,z2)是关键的。
思路:暴力出奇迹
#include<bits/stdc++.h>
using namespace std;
int str[120][120][120];
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for (int i = 1;i<=n;i++)
for (int j = 1;j<=m;j++)
{
string s;
cin >> s;
for (int t = 0;t<s.size();t++)
{
if (s[t]=='1')
str[i][j][t+1]=1;
else
str[i][j][t+1]=0;
}
}
int ans = 0;
for (int i = 1;i<=n;i++)
for (int j = 1;j<=m;j++)
for (int t = 1;t<=k;t++)
{
if (str[i][j][t]){
if(str[i-1][j][t]&&str[i+1][j][t])ans++;
else if(str[i][j-1][t]&&str[i][j+1][t])ans++;
else if(str[i][j][t-1]&&str[i][j][t+1])ans++;
else if(str[i-1][j][t]&&str[i][j+1][t]&&(!str[i-1][j+1][t]))ans++;
else if(str[i-1][j][t]&&str[i][j][t+1]&&(!str[i-1][j][t+1]))ans++;
else if(str[i][j-1][t]&&str[i+1][j][t]&&(!str[i+1][j-1][t]))ans++;
else if(str[i][j-1][t]&&str[i][j][t+1]&&(!str[i][j-1][t+1]))ans++;
else if(str[i][j][t-1]&&str[i+1][j][t]&&(!str[i+1][j][t-1]))ans++;
else if(str[i][j][t-1]&&str[i][j+1][t]&&(!str[i][j+1][t-1]))ans++;
}
}
printf("%d\n",ans);
}