UVA572(Oil Deposits)(DFS)

来源:互联网 发布:iapp 免杀源码 编辑:程序博客网 时间:2024/05/21 22:38

题目链接

第一次做DFS的题目,还一次AC了,开心

#include<iostream>using namespace std;#define MAXN 105char map[MAXN][MAXN];int m,n;int dir[8][2] = { { 0,-1 },{ 0,1 },{ 1,0 },{ -1,0 },{-1,-1},{-1,1},{1,-1},{1,1} };//因为题目意思是斜着也算连通,所以定义八个方向void dfs(int si, int sj){    if (si<0 || si>m || sj<0 || sj>n)return;    for (int i = 0; i < 8; i++)    {        if (map[si + dir[i][0]][sj + dir[i][1]] == '@')        {            map[si + dir[i][0]][sj + dir[i][1]] ='*';//做过的地方就标记不能走            dfs(si + dir[i][0], sj + dir[i][1]);//递归把连通的地方都走一遍        }    }    return ;}int main(){    while (cin >> m >> n&&n&&m)    {        for (int i = 0; i < m; i++)            for (int j = 0; j < n; j++)                cin >> map[i][j];        int num = 0;  //记录连通分量        for (int i = 0; i < m; i++)            for (int j = 0; j < n; j++)                if (map[i][j] == '@') { dfs(i, j); num++; }        cout << num << endl;    }}

这是最简单的DFS题目,我们老师和我们说DFS最精彩的地方应该是剪枝,因为DFS是要去走完整幅地图,效率还是很低的,要提高效率,就要适当剪枝,避免一些多余的步子,当然也不可过度剪枝,所以怎么剪枝还是要多想。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 挂半帘代表不吉利吗 民国旧影 半卷舒帘 情惑小妈咪 半纱帘影 半卷湘帘半掩门 空调帘 隔帘 坐垫 开关套 餐桌椅套 电视罩 空调套 皮门帘 半年 用维e擦脸半年后 鸡蛋放半年都不变坏 鸡泻药澡堂半年假 2019下半年四级考试报名入口 用维e擦脸半年后图片 2019下半年四级 植发半年惨不忍睹图片 每天吃木耳半年后症状 2019下半年四六级 鸡澡堂泻药半年假 2019下半年四六级报名 2019上半年四级考试报名入口 国民经济半年报 纹身半年用醋能洗掉 汉能欠薪 汉能集团欠薪半年 鸡泻药澡堂屎半年第二篇 4岁打生长激素半年长12厘米 公鸡泻药澡堂半年病假 消防员转身看到半年未见妻子 鸡泻药澡堂飞翔半年假原版 2018年银行卡超过半年不用新规 峨眉山月半轮秋影入平羌江水 地球半径 焦半径 曲率半径 圆半径公式