下载此文档

房间问题.ppt


文档分类:生活休闲 | 页数:约10页 举报非法文档有奖
1/10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/10 下载此文档
文档列表 文档介绍
房间问题
张伊伦
C++
问题描述
下图是一张建筑平面图,编程计算: 1 、该建筑中有多少个房间: 2 、最大的房间有多大; 3 、拆除建筑中的某一堵墙,以形成一个尽可能大的房间。指出 该墙。该建筑分成 m * n 个方块 (m ≤ 50 , n ≤ 50) ,每个方块可有 0 ~ 4 堵墙 ) 。
样例的平面图如下:
struct room { int shang; int xia; int zuo; int you; int zh; ; void zhang() {zh=1;}; void cl() { if (j%2==1) {zuo=1; j=j-1;} switch (j) { case 2:shang=1;break; case 4:you=1;break; case 8:xia=1;break; case 6:{shang=1;you=1;};break; case 10:{shang=1;xia=1;};break; case 12:{you=1;xia=1;};break; case 14:{shang=1;you=1;xia=1;};break; } }
数据部分
标记
处理读入数据
定义room类型
算法
深搜(递归)
把每个方块看成一个点,如果两点之间没有墙,则递归相邻的点,遇墙返回;
枚举
枚举所有可能拆除的墙,每拆除一面墙,则调用一遍递归过程,并记录最大值
(递归)
把每个方块看成一个点,如果两点之间没有墙,则递归相邻的点,遇墙返回;
void dfs(room p)
(); f++;
if ((==0)&&(d2!=0)) {d2=d2-1; if (q[d1][d2].zh==0) dfs(q[d1][d2]); d2=d2+1; }
if ((==0)&&(d1!=a-1)) {d1=d1+1; if (q[d1][d2].zh==0) dfs(q[d1][d2]); d1=d1-1; }
if ((==0)&&(d2!=s-1)) {d2=d2+1; if (q[d1][d2].zh==0) dfs(q[d1][d2]); d2=d2-1; }
if ((==0)&&(d1!=0)) {d1=d1-1; if (q[d1][d2].zh==0) dfs(q[d1][d2]); d1=d1+1;
Void Make1()
ifstream fin(“d:/”); fin>>a>>s; for (d1=0;d1<=a-1;d1++) for(d2=0;d2<=s-1;d2++) { fin>>j; q[d1][d2].cl(); } //处理读入数据 for (d1=0;d1<=a-1;d1++) for(d2=0;d2<=s-1;d2++) { if (q[d1][d2].zh!=1) { f=0; h++; dfs(q[d1][d2]); if (f>g) {g=f;} } }

房间问题 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数10
  • 收藏数0 收藏
  • 顶次数0
  • 上传人文库旗舰店
  • 文件大小77 KB
  • 时间2020-12-13