poj1321-棋盘问题

4 篇文章 0 订阅
3 篇文章 0 订阅

一个好的博客应该http://blog.csdn.net/laner0515/article/details/6977760可维护,可扩展,分类明确.


嘛。。依旧在提升自己写博客的技能点数。不过发现自己懒癌复发。总是不愿意去学习新的东西新的方法。循规蹈矩按部就班= =。老汉推车的刷题速度。。。恩。                                                              


××××题外话:(看到寝室的二哥LBC以数十倍于我的思考速度和执行速度以及各种能力的差距在进步着。。瑟瑟发抖。。。陷入黑暗之渊。后悔莫及= =。而且如今我和LBC(上铺兄弟)的差距(===jxj===)

已经不是一星半点了= =。也只能怪自己。。当初心生嫉妒。。。种种自讨苦吃。。。。。既然当初做过的种种决定使自己没有了退路。。也只好如此。。。接受自己(大二下了已经)拼劲全力透支身体。。等到退役了也终究达不到三流末流的水平的程度= =。。嘛。。。感慨颇多。。废话到此位置××××(逻辑混乱。抹掉= =。


言归中转:

        这道题目首先想一个比较复杂&&通用的例子:

                                   5(m)    3(n)

                                   #####

                                   #####

                                   。。。#。

                                   #####

                                   #####

  就是比如n == 3 那么当step累加到3的时候把最后一步消掉,再continue,这样做的好处是上面所有步骤订好了以后最后一步可以把地图中的所有符合条件记得都走一遍并记录下来。直到到达地图的最后,然后返回到上一个step,再continue,也就是说依次把step从后往前让他分家隔离开。

嘛~,表达的不是很清晰。

上代码。。如果有不对的地方请各位大佬指教留言。大笑

#include<stdio.h>
#include<string.h>
char map[10][10];
int m, n;
int step = 0;
int con;
int mapi[10];
int mapj[10];
void dfs(int x, int y);
int main(){
    int i, j;
    while(scanf("%d %d", &m, &n) != EOF && m != -1 && n != -1)
    {
        getchar();
        memset(map, 0, sizeof(map));
        memset(mapi, 0, sizeof(mapi));
        memset(mapj, 0, sizeof(mapj));
        for(i = 0; i < m; i++){
            for(j = 0; j < m; j++)
                scanf("%c", &map[i][j]);
                getchar();
            }
        step = 0;
        con = 0;
        dfs(0, 0);
        printf("%d\n", con);
    }
    return 0;
}

void dfs(int x, int y){
    int i, j;
    for(i = x; i < m; i++)
        for(j = y; j < m; j++){
            if(map[i][j] == '#' && mapi[i] == 0 && mapj[j] == 0){

                step++;
                mapi[i] = 1;
                mapj[j] = 1;

                if(step == n){

                    con++;
                    step--;
                    mapi[i] = 0;
                    continue;

                }

                dfs(i + 1, 0);
                mapi[i] = 0;
                mapj[j] = 0;
                step--;
                continue;

            }
        }
    return;
}
//线性同余定理
//中国剩余定理
//将题目。。庞胜。。。。欸
//完整的思路再写
//左右子树查询
//数论两个月前。。。。
//同于传递法
//思路不清晰。导致这段代码根本无法修改在原有基础上。。。。看着大一的一个个都弄着高科技而我在这里想T


以前写东西比较虚荣。每次写都匆匆了事。结果无数次的 从零开始。

这次写完后看了别人的代码一时半伙还是看不懂。。。。

先附上地址http://blog.csdn.net/kindlucy/article/details/5835003

感觉思路比我这个更好。更快




(我还是惰于学习C++

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值