深搜(DFS),Image Perimeters
2016-03-17 22:20
302 查看
题目链接:http://poj.org/problem?id=1111
解题报告:
1、这里深搜有一点要注意,对角线上的点,如果为'.',则total不应该增加,因为这不是他的边长。
解题报告:
1、这里深搜有一点要注意,对角线上的点,如果为'.',则total不应该增加,因为这不是他的边长。
#include <stdio.h> #include <string.h> char maps[35][35]; int flag[35][35]; int mov1[4][2]= {{1,0},{-1,0},{0,1},{0,-1}}; int mov2[4][2]= {{1,1},{1,-1},{-1,1},{-1,-1}}; int r,c; int click_x,click_y; int total;///周长 void dfs(int x,int y) { if(flag[x][y]!=0) return ; else { flag[x][y]=1; int tx; int ty; for(int k=0; k<4; k++) { tx=x+mov1[k][0]; ty=y+mov1[k][1]; if(maps[tx][ty]=='X'&&flag[tx][ty]==0) dfs(tx,ty); else if(maps[tx][ty]=='.') total++; } for(int k=0; k<4; k++) { tx=x+mov2[k][0]; ty=y+mov2[k][1]; if(maps[tx][ty]=='X'&&flag[tx][ty]==0) dfs(tx,ty); } } } int main() { while(scanf("%d%d%d%d",&r,&c,&click_x,&click_y),r) { total=0; memset(flag,0,sizeof(flag)); memset(maps,'.',sizeof(maps)); for(int i=1; i<=r; i++) { scanf("%s",maps[i]+1); maps[i][c+1]='.'; } dfs(click_x,click_y); printf("%d\n",total); } return 0; }
相关文章推荐
- 虚拟机(CentOS) 桥接模式配置
- 面试中的一些问题——JAVA(三)
- 初入android之CheckBox
- 拆分链表
- 阿里巴巴 hr面
- 关于keyGenerator,KeyPairGenerator,SecretKeyFactory的解析
- 两步建立 ssh 反向隧道
- scapy实现一个端口扫描器(基于tcp三次握手扫描)——简析
- USACO2.3基础的算法题
- Eclipse中给jar包导入JavaDoc的方法
- 程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上。
- Python中subprocess学习
- extern "C"什么意思
- C++ explicit关键字
- Java---软件试用次数(Properties类的简单使用)
- Java---软件试用次数(Properties类的简单使用)
- 复利计算之回顾并总结这三次实验
- Linux内核分析——第四周学习笔记20135308
- Android 进程常驻(5)----开机广播的简单守护以及总结
- Java CopyOnWriteArrayList 源码分析