怎麼了解三維數組? /*#include <iostream>
using namespace std;*/
#include <stdio.h>
#include <string.h>
int a[100][10][10];/*三維數組 存儲第i個學校 第j支隊伍 的第k個隊員*/
int main()
{
int n, i, j, k;
scanf("%d", &n);
int m[110];/*每個學校隊伍數量*/ /*注意這裡的一個小問題??? 第二行給出 N 個不超過10的正整數, 不要定義為m[10] 他隻是說某個m[i]存的數不超過十 注意哈 不然出現段錯誤 表示數組越界通路 那麼它有多少個m[i]呢 不超過一百個 */
/* 要有一個數 記錄最大的隊伍數量*/
int countmax = 0;
for(i = 0; i < n; i++)
{
scanf("%d", &m[i]);
if(m[i] > countmax)
{
countmax = m[i];
}
}
int lasti = -1;
int bianhao = 0;
for(j = 0; j < countmax; j++)/*隊伍數量 為什麼條件是最大的那個?*/
{
for(k = 0; k < 10; k++)/*10個隊員*/
{
for(i = 0; i < n; i++)/*内層循環才為學校編号*/
{
if(j < m[i])/* 看題 就拿樣例來說 j = 3 m[1] = 4 時
表示這第二個學校 還沒配置設定完所有隊伍 其他學校的分完了
第三個學校 j = 3 m[2] = 2 j > m[i] 第三個學校隊伍配置設定完畢了 是以不會進入下面的語句*/
{
if(lasti == i)/*說明隻剩下一個學校*/
{ /*lasti是個标記變量 表示上一次操作标記的學校
如果跟這次操作的學校編号一樣 不就表示隻剩下這一個學校了嗎
i是學校編号*/
bianhao += 2;
}
else
{
bianhao++;
}
a[i][j][k] = bianhao;
lasti = i;/*每次操作完成後 更新lasti 重新标記此次操作的學校編号*/
}
}
}
}
for(i = 0; i < n; i++)
{
printf("#%d\n", i + 1);
for(j = 0; j < m[i]; j++)
{
for(k = 0; k < 9; k++)
{
printf("%d ", a[i][j][k]);
}
printf("%d\n", a[i][j][k]);
}
}
return 0;
}
#include<iostream>
#include<queue>
using namespace std;
int M,N,L,T;
int v[1300][130][70];
bool vis[1300][130][70]={false};
int X[6]={1,-1,0,0,0,0};
int Y[6]={0,0,1,-1,0,0};
int Z[6]={0,0,0,0,1,-1};
struct node{
int x,y,z;
}t;
bool judge(node t){
if(t.x>=M||t.x<0||t.y>=N||t.y<0||t.z>=L||t.z<0) return false;
if(vis[t.x][t.y][t.z]==true||v[t.x][t.y][t.z]==0) return false;
return true;
}
int bfs(int x,int y,int z){
int total=0;
queue<node> q;
t.x=x;t.y=y;t.z=z;
q.push(t);
vis[x][y][z]=true;
while(!q.empty()){
node top=q.front();
q.pop();
total++;
for(int i=0;i<6;i++){
t.x=top.x+X[i];
t.y=top.y+Y[i];
t.z=top.z+Z[i];
if(judge(t)==true){
q.push(t);
vis[t.x][t.y][t.z]=true;
}
}
}
if(total>=T) return total;
else return 0;
}
int main(){
int sum=0;
scanf("%d%d%d%d",&M,&N,&L,&T);
for(int k=0;k<L;k++){
for(int i=0;i<M;i++){
for(int j=0;j<N;j++)
scanf("%d",&v[i][j][k]);
}
}
for(int k=0;k<L;k++){
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
if(vis[i][j][k]==false&&v[i][j][k]==1){
sum+=bfs(i,j,k);
}
}
}
}
printf("%d",sum);
return 0;
}