1 条题解
-
0
C :
#include<stdio.h> #include<string.h> int n,m; char s[104][104]; int dir[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1}; int vis[104][104]; void dfs(int x,int y) { int i; if(x<0||x>=n||y<0||y>=m||vis[x][y]||s[x][y]=='*') return; vis[x][y]=1; for(i=0; i<8; i++) dfs(x+dir[i][0],y+dir[i][1]); } int main() { int i,j,ans,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(s,0,sizeof(s)); memset(vis,0,sizeof(vis)); ans=0; for(i=0;i<n;i++) scanf("%s",s[i]); for(i=0;i<n;i++) for(j=0;j<m;j++) if(s[i][j]=='@'&&!vis[i][j]) { ans++; dfs(i,j); } printf("%d\n",ans); } return 0; }
C++ :
#include <iostream> #include <cstring> #include <fstream> using namespace std; char mat[115][115]; int visited[115][115]; void dfs(int x,int y) { if((visited[x][y]==1 || mat[x][y]=='*' )) return; visited[x][y]=1; dfs(x-1,y-1); dfs(x-1,y); dfs(x-1,y+1); dfs(x,y-1); dfs(x,y+1); dfs(x+1,y-1); dfs(x+1,y); dfs(x+1,y+1); } int main() { //ifstream cin; //cin.open("5.in"); //ofstream cout; //cout.open("5.out"); int length,height; int testcase; cin>>testcase; while(testcase--) { cin>>length>>height; memset(mat,'*',sizeof(mat)); memset(visited,0,sizeof(visited)); int count=0; for(int i=1;i<=length;i++) { for(int j=1;j<=height;j++) { cin>>mat[i][j]; } } for(int i=1;i<=length;i++) { for(int j=1;j<=height;j++) { if(mat[i][j]=='@' && visited[i][j]==0) { dfs(i,j); count++; } } } cout<<count<<endl; } return 0; }
- 1
信息
- ID
- 1422
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者