本文主要是介绍Red and Black【HDOJ1312】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
注意多组输入,要清空数组和计数置零
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cstring>
using namespace std;
char arr[23][23];
int x,y,cnt;void dfs(int u,int v){if(u<0||u>=x||v<0||v>=y||arr[u][v]=='#') return;arr[u][v]='#';cnt++;dfs(u,v-1);dfs(u,v+1);dfs(u-1,v);dfs(u+1,v);
}
int main(){while(scanf("%d%d",&y,&x)!=EOF){if(x==0&&y==0) break;cnt=0;memset(arr,0,sizeof(arr));int starti=0,startj=0;for(int i=0;i<x;i++){for(int j=0;j<y;j++){cin>>arr[i][j];if(arr[i][j]=='@'){starti=i;startj=j;}}}dfs(starti,startj);cout<<cnt<<endl;}return 0;
}
又一版本
//需要注意的问题,读入字符时,要注意用getchar清除掉换行符
//#include<bits/stdc++.h> //重大OJ不能使用万能头文件
#include<cstdio>
#include<cstring>
using namespace std;
char matrix[25][25];
int m,n;
int dfs(int x, int y){if(x<0||x>=m||y<0||y>=n||matrix[x][y]=='#') return 0;matrix[x][y]='#';return 1+dfs(x+1,y)+dfs(x-1,y)+dfs(x,y+1)+dfs(x,y-1);
}
int main(){while(scanf("%d%d",&n,&m)){ //m和n是反着写的 if(m==0&&n==0) return 0;int a,b;memset(matrix,0,sizeof(matrix));getchar();for(int i=0;i<m;i++){for(int j=0;j<n;j++){scanf("%c",&matrix[i][j]);if(matrix[i][j]=='@'){a=i;b=j;matrix[i][j]='.';}}getchar();}printf("%d\n",dfs(a,b));} return 0;
}
这篇关于Red and Black【HDOJ1312】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!