标签:ini contains other 中标 osi 元素 *** square sam
题目:
Input
Output
Sample Input
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0
Sample Output
0 1 2 2
题意描述:
输入n和m为矩阵的大小(1 <= m <= 100 and 1 <= n <= 100),以及n*m的矩阵
计算并输出该矩阵中@的组成的油田有多少个(上下左右斜对角都能相连)
解题思路:
遍历字符数组,遇到‘@‘对其进行一遍深搜,搜索过程中标记已经走过的地方,直到遍历完所有元素。
代码实现:
1 #include<stdio.h> 2 #include<string.h> 3 char map[110][110]; 4 int m,n,book[110][110]; 5 void dfs(int x,int y,int c); 6 int main() 7 { 8 int i,j,num; 9 while(scanf("%d%d",&m,&n),m||n) 10 { 11 memset(map,‘0‘,sizeof(map));//初始化的位置 12 for(i=1;i<=m;i++) 13 { 14 for(j=1;j<=n;j++) 15 scanf(" %c",&map[i][j]);//处理行列数后多余的空格 16 getchar(); 17 } 18 memset(book,0,sizeof(book)); 19 num=0; 20 for(i=1;i<=m;i++) 21 { 22 for(j=1;j<=n;j++) 23 { 24 if(map[i][j]==‘@‘&&book[i][j]==0) 25 { 26 num--; 27 book[i][j]=num; 28 dfs(i,j,num); 29 } 30 } 31 } 32 printf("%d\n",-num); 33 } 34 return 0; 35 } 36 void dfs(int x,int y,int c) 37 { 38 int next[8][2]={0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1};//注意搜索的方向个数 39 int k,tx,ty; 40 book[x][y]=c; 41 for(k=0;k<=7;k++) 42 { 43 tx=x + next[k][0];//位置在原来的基础上变化 44 ty=y + next[k][1]; 45 if(tx<1||tx>m||ty>n||ty<1) 46 continue; 47 if(map[tx][ty]==‘@‘ && book[tx][ty]==0) 48 { 49 book[tx][ty]=c; 50 51 dfs(tx,ty,c); 52 } 53 } 54 return ; 55 }
易错分析:
1、处理地图的时候注意吃掉空格
2、注意搜索方向的个数
3、tx要在原来的基础上进行变化
标签:ini contains other 中标 osi 元素 *** square sam
原文地址:http://www.cnblogs.com/wenzhixin/p/7271071.html