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 ...
随机推荐
- 【Jqurey EasyUI+Asp.net】----DataGrid数据绑定,以及增、删、改(SQL)
也懒得打其他字了,直接进入主题吧 1.首先,数据表Rex_Test ID int 自增 tName varchar(10) 姓名 tEmail varchar(80) 邮箱 2.至于代码里的Jqure ...
- java基础知识汇总6(html篇)
五.html // 定义文档类型. < html> 定义 HTML 文档. < body> 定义文档的主体. < h1> to < h6> 定义 HTM ...
- C# does not contain a constructor that takes no parameter
C# 中子类要重用父类的构造函数时, 一般会在子类构造函数后面调用 : base(paratype, para). 如果父类有一个參数个数为1的构造函数, 没有 0 參构造函数. 子类想要重用这个构造 ...
- 【c++】map 迭代器删除演示样例
C++ STL中的map是很常见的.通常我们用例如以下方式来遍历,而且删除map中的一些entry: map<int, int> mp; mp.insert(make_pair(1,1)) ...
- POJ2155 Matrix 二维线段树
关键词:线段树 二维线段树维护一个 维护一个X线段的线段树,每个X节点维护一个 维护一个Y线段的线段树. 注意,以下代码没有PushDownX.因为如果要这么做,PushDownX时,由于当前X节点的 ...
- 20170225-ALV tree 显示
1.写程序, 2.话屏幕9000,CALL SCREEN 9000.(双击屏幕进去画个容器就ok,+OK_CODE,+去掉注释) 3.处理好ALV 的PBO 初始化,处理用户事件PAO,user co ...
- leetcode 677. Map Sum Pairs
Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a pair ...
- TCO 2016 Round 1B
problem 250 Problem Statement Vasa likes to construct sequences of numbers. If you tell him a positi ...
- react native 中的redux
一.使用redux 的条件: 1.某个组件的状态,需要共享: 2.某个状态需要在任何地方都可以拿到: 3.一个组件需要改变全局状态: 4.一个组件需要改变另一个组件的状态. redux 说明白点, ...
- SVN命令使用详解【转】
本文转载自:http://blog.sina.com.cn/s/blog_963453200101eiuq.html 1.检出svn co http://路径(目录或文件的全路径) [本地目录全路 ...