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. 终端中的乐趣:6个有趣的Linux命令行工具

    文章链接: http://hpw123.net/a/Linux/ruanjiananzhuang/2014/1103/117.html​ 很多其它文章尽在 http://www.hpw123.net ...

  2. 记录:50多行程序中找出多写的一个字母e

    小霍同学调程序,做的是第11周的项目1 - 存储班长信息的学生类,可是她写的程序(就在以下),呃,请读者自己执行一下吧.(下午在机房调试时用的是Code::Blocks10.05.输出的是非常长的莫名 ...

  3. 阿里云安装nginx 启动失败的原因。

    阿里云编译安装nginx服务器后启动一直报下面错误. 百度了一圈,看到一个说要先关掉apache服务,感觉这个好像是对的,立马做了下面操作. 果然把nginx起了起来. 从这边才知道apache和ng ...

  4. 用NHibernate处理带属性的多对多关系

    1.引言 老谭在面试开发者的时候,为了考察他们的数据库开发能力,经常祭出我的法宝,就是大学数据库教程中讲到的一个模式:学生选课.这个模式是这种: 在这个模式中,学生(Student)和课程(Cours ...

  5. C语言文件读写Demo

    CIODemo.c #include <stdio.h> #include <time.h> #define INPUT_BUFFER_SIZE 100 * 1024 int ...

  6. 「翻译」Unity中的AssetBundle详解(二)

    为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你 ...

  7. linux 解决 Device eth0 does not seem to be present

    在虚拟机中安装cent os系统,然后配置网络 执行命令ifconfig 没有看到eth0的信息: 重启网卡报错: service network restart Shutting down loop ...

  8. miller_rabin模板

    miller_rabin素数测试法 #include <iostream> #include <cstdlib> #include <stdio.h> #inclu ...

  9. manacher求最长回文子串算法模板

    #include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...

  10. 关于android的DB操作

    package com.metoo.girls; import android.content.ContentValues; import android.content.Context; impor ...