zoj2412 dfs连通图
2016-03-19 09:14
274 查看
zoj2412
还记得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 55 int n,m; int vis ; char a ; 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 ; int vis ; 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; }
相关文章推荐
- 中山市选2014 解题报告 By BPM136
- android手机调通kgdb调试
- 大白话解释互联网后台为什么常用异步server?
- hdu 1257 最少拦截系统 贪心
- android知识体系
- SSH框架探索
- R语言入门班
- 停止更新支持的Ubuntu更新源
- Spring MVC,拦截器实现session控制
- javaweb学习总结(八)——HttpServletResponse对象(二)
- 第三周学习进度条
- 在MacOS下Python安装lxml报错找不到头文件 xmlversion.h 的解法方法
- 关于动态插件化技术的网站
- Intellij IDEA快捷键
- PaaS优点与限制(3)
- dijkstra算法的应用(poj2387)
- PaaS优点与限制(3)
- 项目常用Javascript分享,包含常用验证和Cookie操作
- Scala学习笔记(2)
- 致我们终将失去的CF