不撞南墙不回头———深度优先搜索(DFS)Oil Deposits
Posted Timeashore
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不撞南墙不回头———深度优先搜索(DFS)Oil Deposits相关的知识,希望对你有一定的参考价值。
Oil Deposits
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23018 Accepted Submission(s):
13272
#include <stdio.h>
#include <string.h>
int m,n,total = 0,book[101][101];
char c[101][101];
int next[8][2]=
{
{0,1},//右
{1,1},//右下
{1,0},//下
{1,-1},//左下
{0,-1},//左
{-1,-1},//左上
{-1,0},//上
{-1,1}//右上
};
void dfs(int x,int y)
{
int tx,ty,k;
for(k=0;k<8;k++)
{
tx = x+next[k][0];
ty = y+next[k][1];
if(tx<1||ty<1||tx>m||ty>n)
{
continue;
}
if(c[tx][ty]==‘@‘&&book[tx][ty]==0)
{
//total++;//这里不能加1 ,因为是跟上一个连着的油田,都算是一块油田
book[tx][ty] = 1;
dfs(tx,ty);//8个中有一个满足条件,以这一个为中心,继续往下搜,如果不满足条件,返回来,接着上一次没搜完的搜
//book[tx][ty] = 0;//每一格就走一次,搜过了不再搜
}
}
return;
}
int main()
{
int i,j;
while(scanf("%d%d",&m,&n)&&m!=0)
{
getchar();
total = 0;
memset(book,0,sizeof(book));
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
scanf("%c",&c[i][j]);
}
getchar();
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(c[i][j]==‘@‘ && book[i][j]==0)
{
total++;//加它本身
dfs(i,j);//对它的八个方向进行搜索
}
}
}
printf("%d\n",total);
}
return 0;
}
以上是关于不撞南墙不回头———深度优先搜索(DFS)Oil Deposits的主要内容,如果未能解决你的问题,请参考以下文章