石油合并

来源:互联网 发布:java编程语言基础 编辑:程序博客网 时间:2024/05/01 02:33

点击打开链接


往四个方向深搜索即可。重点理解递归就可,递归是系统自己调用一个栈。

它会1,将所有的实在参数,返回地址等信息给调用函数保存。

2,为被调用的函数分配内存。

3,转移到调用函数的入口。


#include<stdio.h>#include<string.h>int n,m,many;int map[55][55];char s[55][55];int dfs(int i,int j){    map[i][j] = 1;    if(i+1<n && s[i+1][j]=='@' &&map[i+1][j]==0) dfs(i+1,j);    if(j+1<m && s[i][j+1] == '@' && map[i][j+1]==0) dfs(i,j+1);    if(i-1>=0 && s[i-1][j]=='@' && map[i-1][j]==0) dfs(i-1,j);    if(j-1>=0 && s[i][j-1]=='@' && map[i][j-1]==0) dfs(i,j-1);    return 1;}int main(){    int i,j;    while(scanf("%d%d",&n,&m)!=EOF){        many = 0;        memset(map,0,sizeof(map));        for(i=0;i<n;i++) scanf("%s",s[i]);        for(i = 0;i<n;i++){            for(j=0;j<m;j++){                if(map[i][j]==0 && s[i][j]=='@') many += dfs(i,j);            }        }        printf("%d\n",many);    }    return 0;}


0 0
原创粉丝点击