zoj2412

#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<climits>
#include<algorithm>
using namespace std;
#define ll long long
#define mod 1000000007
#define N 55
int n,m;
int vis[N][N];
char a[N][N];
int dx[4]={0,-1,0,1};
int dy[4]={1,0,-1,0};//这个还是蛮有讲究的。
int ma[][4]={{0,1,1,0},{1,1,0,0},{0,0,1,1},{1,0,0,1},{0,1,0,1},{1,0,1,0},{1,1,1,0}
,{0,1,1,1},{1,0,1,1},{1,1,0,1},{1,1,1,1}};
void dfs(int x,int y,int k)
{
vis[x][y]=1;
for(int i=0;i<4;i++)
{
if(ma[k][i])
{
int aa=x+dx[i];
int bb=y+dy[i];
int v=a[aa][bb]-'A';
if(aa>=0&&bb>=0&&aa<n&&bb<m&&!vis[aa][bb]&&ma[v][(2+i)%4])
/*ma[v][(2+i)%4]只是要去保证两个连通的话就继续搜索,其实...dfs连通图就是死命的标记...你满足我就标记,和那个dfs解决最长路不相同*/
dfs(aa,bb,v);
}
}
} int main()
{
while(~scanf("%d%d",&n,&m)&&n!=-1&&m!=-1)
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
scanf("%s",a[i]);
int ans=0;
int ff;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(!vis[i][j])
{
int v=a[i][j]-'A';
dfs(i,j,v);
ans+=1;
}
}
}
printf("%d\n",ans);
}
return 0;
}

还记得CF的一题,题意就是本来一张图有 S 和 . S不能走的,.是可以走的,.本来就是连通的,然后给你一个数字K,让你去补满K个X,使得.还是连通的。

思路,应该是DFS到把所有.都遍历到尾,然后在尾部依次放X,这样感觉比较好

codeforce dfs连通图

#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<climits>
#include<algorithm>
using namespace std;
#define ll long long
#define mod 1000000007
#define N 505
int n,m,k;
char a[N][N];
int vis[N][N];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0}; void dfs(int x,int y)
{
if(k==0)
return;
if(vis[x][y])
return;
if(x<0||y<0||x>=n||y>=m)
return;
if(a[x][y]=='#')
return;
vis[x][y]=1;
for(int i=0;i<4;i++)
{
int aa=dx[i]+x;
int bb=dy[i]+y;
dfs(aa,bb);
}
if(k==0)
return;
--k;
a[x][y]='X';
}
int main()
{
int i,j;
while(~scanf("%d%d%d",&n,&m,&k))
{
for(i=0;i<n;i++)
scanf("%s",a[i]);
int flag=0;
for(int i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]=='.')
{
dfs(i,j);
flag=1;
break;
}
}
if(flag)
break;
}
for(i=0;i<n;i++)
printf("%s\n",a[i]);
}
return 0;
}

zoj2412 dfs连通图的更多相关文章

  1. Farm Irrigation ZOJ 2412(DFS连通图)

    Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot ...

  2. Oil Deposits(DFS连通图)

    Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...

  3. Lake Counting(DFS连通图)

    Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...

  4. tarjan求强连通分量的思考

    我是按照这里的思路来的.这个博文只是感性理解. 递归树 关于递归树,这篇博文讲的很好,我只是给自己总结一下. 定义vis数组,在dfs连通图时赋予它们不同的含义: vis=0,表示这个点没有被访问. ...

  5. dfs判断连通图(无向)

    在图论中,连通图基于连通的概念.在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的.如果 G 是有向图,那么连接vi和vj的路径中所有的边都 ...

  6. Battle Over Cities (25)(DFS、连通图)

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

  7. poj2767,单向连通图判定,缩点+重新建图+新图DFS

    /*该题被博客里标记为中等题,30分钟内1A,掌握了算法就简单了,单向连通图判定,单向连通图缩点 后必然唯一存在出度为0的点和入度为0的点,并且从入度为0的点出发,可以遍历所有点后到达出度为0点 (一 ...

  8. 采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了)

    //采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了) #include <iostream> using namespace std; ...

  9. 利用DFS算出有多少个连通图

    以下面一个题目为例,[题目链接]: https://www.luogu.com.cn/problem/P4961 题目中涉及求出八联通图的个数,这里给出这步的代码: memset(vis, 0, si ...

随机推荐

  1. 【Jqurey EasyUI+Asp.net】----DataGrid数据绑定,以及增、删、改(SQL)

    也懒得打其他字了,直接进入主题吧 1.首先,数据表Rex_Test ID int 自增 tName varchar(10) 姓名 tEmail varchar(80) 邮箱 2.至于代码里的Jqure ...

  2. java基础知识汇总6(html篇)

    五.html // 定义文档类型. < html> 定义 HTML 文档. < body> 定义文档的主体. < h1> to < h6> 定义 HTM ...

  3. C# does not contain a constructor that takes no parameter

    C# 中子类要重用父类的构造函数时, 一般会在子类构造函数后面调用 : base(paratype, para). 如果父类有一个參数个数为1的构造函数, 没有 0 參构造函数. 子类想要重用这个构造 ...

  4. 【c++】map 迭代器删除演示样例

    C++ STL中的map是很常见的.通常我们用例如以下方式来遍历,而且删除map中的一些entry: map<int, int> mp; mp.insert(make_pair(1,1)) ...

  5. POJ2155 Matrix 二维线段树

    关键词:线段树 二维线段树维护一个 维护一个X线段的线段树,每个X节点维护一个 维护一个Y线段的线段树. 注意,以下代码没有PushDownX.因为如果要这么做,PushDownX时,由于当前X节点的 ...

  6. 20170225-ALV tree 显示

    1.写程序, 2.话屏幕9000,CALL SCREEN 9000.(双击屏幕进去画个容器就ok,+OK_CODE,+去掉注释) 3.处理好ALV 的PBO 初始化,处理用户事件PAO,user co ...

  7. leetcode 677. Map Sum Pairs

    Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a pair ...

  8. TCO 2016 Round 1B

    problem 250 Problem Statement Vasa likes to construct sequences of numbers. If you tell him a positi ...

  9. react native 中的redux

    一.使用redux 的条件: 1.某个组件的状态,需要共享: 2.某个状态需要在任何地方都可以拿到: 3.一个组件需要改变全局状态: 4.一个组件需要改变另一个组件的状态. redux   说明白点, ...

  10. SVN命令使用详解【转】

    本文转载自:http://blog.sina.com.cn/s/blog_963453200101eiuq.html 1.检出svn  co  http://路径(目录或文件的全路径) [本地目录全路 ...