zoj2412 dfs连通图
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连通图的更多相关文章
- 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 ...
- Oil Deposits(DFS连通图)
Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...
- Lake Counting(DFS连通图)
Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...
- tarjan求强连通分量的思考
我是按照这里的思路来的.这个博文只是感性理解. 递归树 关于递归树,这篇博文讲的很好,我只是给自己总结一下. 定义vis数组,在dfs连通图时赋予它们不同的含义: vis=0,表示这个点没有被访问. ...
- dfs判断连通图(无向)
在图论中,连通图基于连通的概念.在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的.如果 G 是有向图,那么连接vi和vj的路径中所有的边都 ...
- 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 ...
- poj2767,单向连通图判定,缩点+重新建图+新图DFS
/*该题被博客里标记为中等题,30分钟内1A,掌握了算法就简单了,单向连通图判定,单向连通图缩点 后必然唯一存在出度为0的点和入度为0的点,并且从入度为0的点出发,可以遍历所有点后到达出度为0点 (一 ...
- 采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了)
//采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了) #include <iostream> using namespace std; ...
- 利用DFS算出有多少个连通图
以下面一个题目为例,[题目链接]: https://www.luogu.com.cn/problem/P4961 题目中涉及求出八联通图的个数,这里给出这步的代码: memset(vis, 0, si ...
随机推荐
- 终端中的乐趣:6个有趣的Linux命令行工具
文章链接: http://hpw123.net/a/Linux/ruanjiananzhuang/2014/1103/117.html 很多其它文章尽在 http://www.hpw123.net ...
- 记录:50多行程序中找出多写的一个字母e
小霍同学调程序,做的是第11周的项目1 - 存储班长信息的学生类,可是她写的程序(就在以下),呃,请读者自己执行一下吧.(下午在机房调试时用的是Code::Blocks10.05.输出的是非常长的莫名 ...
- 阿里云安装nginx 启动失败的原因。
阿里云编译安装nginx服务器后启动一直报下面错误. 百度了一圈,看到一个说要先关掉apache服务,感觉这个好像是对的,立马做了下面操作. 果然把nginx起了起来. 从这边才知道apache和ng ...
- 用NHibernate处理带属性的多对多关系
1.引言 老谭在面试开发者的时候,为了考察他们的数据库开发能力,经常祭出我的法宝,就是大学数据库教程中讲到的一个模式:学生选课.这个模式是这种: 在这个模式中,学生(Student)和课程(Cours ...
- C语言文件读写Demo
CIODemo.c #include <stdio.h> #include <time.h> #define INPUT_BUFFER_SIZE 100 * 1024 int ...
- 「翻译」Unity中的AssetBundle详解(二)
为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你 ...
- linux 解决 Device eth0 does not seem to be present
在虚拟机中安装cent os系统,然后配置网络 执行命令ifconfig 没有看到eth0的信息: 重启网卡报错: service network restart Shutting down loop ...
- miller_rabin模板
miller_rabin素数测试法 #include <iostream> #include <cstdlib> #include <stdio.h> #inclu ...
- manacher求最长回文子串算法模板
#include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...
- 关于android的DB操作
package com.metoo.girls; import android.content.ContentValues; import android.content.Context; impor ...