ZOJ 1709 Oil Deposits

来源:互联网 发布:js div style display 编辑:程序博客网 时间:2024/06/06 00:27

ZOJ 1709   Oil Deposits

     题意:给出图中存在的字符数,给出图中字符的图示,如果代表油田的字符它的上面、下面、左面、右面或者和它成45度角的邻接位置上存在油田,可以认为这两个油田是连着的,所以问这个图中存在几个不相连的油田。

     做过的最简单的递归题,深搜的思路,和棋盘跳马如出一辙,而且就只需要记录搜索的次数。

     细节+代码:

 

    

#include<stdio.h>#include<string.h>char a[200][200]; /*全局。*/int b[200][200];int find(int x,int y){int k,x1,y1;for(k=1;k<=8;k++){ switch(k){case 1:x1=x;y1=y+1;break;        case 2:x1=x+1;y1=y+1;break;        case 3:x1=x+1;y1=y;break;        case 4:x1=x+1;y1=y-1;break;        case 5:x1=x;y1=y-1;break;        case 6:x1=x-1;y1=y-1;break;        case 7:x1=x-1;y1=y;break;        case 8:x1=x-1;y1=y+1;break;}if(b[x1][y1]==0&&a[x1][y1]=='@'){b[x1][y1] = 1;find(x1,y1);}}return 0;}int main(){int i,j,k,m,n,count;for(i = 1;;i++){count = 0;memset(b,0,sizeof(b)); /*函数。*/scanf("%d%d",&m,&n);if(m==0)break;getchar();for(j = 0;j<=m-1;j++)scanf("%s",a[j]);for(j = 0;j<=m-1;j++){for(k = 0;k<=n-1;k++){if(a[j][k]=='@'&&b[j][k]==0){b[j][k] = 1;count++;find(j,k);}}}printf("%d\n",count);}return 0;}


 

 

    

原创粉丝点击