• 油田勘测(深度优先算法,广度优先算法)


    #include <stdio.h>
    char a[100][100];
    int b[100][100],m,n;
    int x[8]={-1,-1,-1,0,0,1,1,1};
    int y[8]={-1,0,1,-1,1,-1,0,1};
    
    //深度优先算法 
    void dfs(int i,int j)
    {
    	int k;
    	int tx;
    	int ty;
    	b[i][j]=1;
    	for(k=0;k<8;k++)
    	{
    		tx=i+x[k];
    		ty=j+y[k];
    		if(tx>=0&&tx<m&&ty>=0&&ty<n&&b[tx][ty]==0&&a[tx][ty]=='@')
    		dfs(tx,ty);
    	}
    }
    
    //广度优先算法 :visit操作(此处为将b[i][j]置1)既可以在入队列前进行,也可以在出队列后进行 
    void bfs(int i,int j)
    {
    	//构造队列 
    	int queue[1000][2];
    	int tx,k,ty,cx,cy;
    	int tail=0;
    	int head=0;
    	//将结点压入队列 
    	queue[tail][0]=i;
    	queue[tail][1]=j;
    	tail++;
    	
    //	b[i][j]=1;
    	while(tail>head)//队列为空结束 
    	{
    	//将队首元素出队列 ,并标记为已访问 
    	cx=queue[head][0];
    	cy=queue[head][1];
    	b[cx][cy]=1;
    	head++;
    	
    	//访问出队列元素的邻接点 
    	for(k=0;k<8;k++)
    	{
    		tx=cx+x[k];
    		ty=cy+y[k];
    		if(tx>=0&&tx<m&&ty>=0&&ty<n&&a[tx][ty]=='@'&&b[tx][ty]==0)//若为邻接点,且未被访问,则将其压入队列 
    		{
    			
    			queue[tail][0]=tx;
    			queue[tail][1]=ty;
    			tail++;
    	//		b[tx][ty]=1;
    		}
    		
    	}
    		
    	}
    	
    } 
    
    int main()
    {
    	
    	int i,j,count,k;
    	count=0;
    	//初始化油田 
    	scanf("%d %d",&m,&n);
    	for(i=0;i<m;i++)
    	scanf("%s",&a[i]);
    	 
    	//置油田未访问标记为0
    	for(i=0;i<m;i++)
    	{ 
    	for(j=0;j<n;j++)
    	b[i][j]=0;
    	} 
    	
    	//从第一个到最后一个油田进行dfs
    	for(i=0;i<m;i++)
    	for(j=0;j<n;j++)
    		if(a[i][j]=='@'&&b[i][j]==0) 
    			{bfs(i,j);
    			count++;
    			}
    		
    	//打印油田数 
    	printf("%d",count);
    	
    	return 0;
    } 

  • 相关阅读:
    javascript 中数字计算精度缺失问题
    javascript闭包
    MySQL数据库的创建
    原生项目使用 sass
    git工具命令
    如何将你的node服务放到线上服务器
    Cookie、Session、Token 的区别
    东北师大-构建之法-2020秋最终成绩(并非期末成绩)
    20201220-东北师范大学-助教-周总结-第14次
    东北师范大学-构建之法-20201207作业成绩
  • 原文地址:https://www.cnblogs.com/wangxueliang/p/9346485.html
Copyright © 2020-2023  润新知