首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

准备去长期潜伏,最后和大家探讨一下几个经典的回朔算法解决思路

2012-02-28 
准备去长期潜伏,最后和大家探讨一下几个经典的回朔算法前些天看到了有人发布有关算法的贴子,说来惭愧,本人

准备去长期潜伏,最后和大家探讨一下几个经典的回朔算法
前些天看到了有人发布有关算法的贴子,说来惭愧,本人几乎忘记了如何做回溯了,花了很长时间,不段在草稿纸上模拟,上天不负有心人,最终还是做出了以前做过的几个经典案例,与大家分享一下。

下载地址

C# code
        /// <summary>        /// 获取数列        /// </summary>        protected void getNumList()        {            int[] ary = new int[] { 0, 1, 2, 2 };            ary.CopyTo(ary, 0);            int s = 3;            string num = "1234";            char[] ary_num = num.ToCharArray();            int n = ary_num.Length - 1;            int cout = 0;            string txt = string.Empty;            while (s >= 0)            {            loop: if (ary[s] >= n)                {                    ary[s] = -1;                    s = s - 1;                }                else                {                    ary[s] = ary[s] + 1;                    for (int i = s - 1; i >= 0; i--)                    {                        if (ary[s] == ary[i])                        {                            goto loop;                        }                    }                    if (s == 3 && !txt.Contains(string.Format("{0}{1}{2}{3}", ary_num[ary[0]], ary_num[ary[1]], ary_num[ary[2]], ary_num[ary[3]])))                    {                        cout++;                        txt = txt + "," + string.Format("{0}{1}{2}{3}", ary_num[ary[0]], ary_num[ary[1]], ary_num[ary[2]], ary_num[ary[3]]);                        Response.Write(string.Format("{0}{1}{2}{3}<br/>", ary_num[ary[0]], ary_num[ary[1]], ary_num[ary[2]], ary_num[ary[3]]));                    }                    if (s < 3)                    {                        s = s + 1;                    }                }            }            Response.Write(string.Format("{1}总数为:{0} 个数列", cout, num));        }


C# code
        /// <summary>        /// 走迷宫        /// </summary>        protected void findPath()        {            //初使化地图            int[,] ary_map = new int[8, 12]            {                { 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 },                { 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1 },                { 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1 },                { 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1 },                { 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1 },                { 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0 },                { 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1 },                { 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0 }            };                        for (int i = 0; i < 8; i++)            {                for (int j = 0; j < 12; j++)                {                    Response.Write(ary_map[i, j]);                }                Response.Write("<br/>");            }                        //开始询址            int s = 0;//记录第几步            int[] st = new int[8 * 12];//记录每步的方向y - 1(上),x + 1(左),y - 1(下),x - 1(右)            int x = 0;//第几步的x            int y = 0;//第几步的y            while (s >= 0)            {                //判断方向                switch (st[s])                {                    case 0:                        y = y - 1;//向上走                        break;                    case 1:                        x = x + 1;//向左走                        break;                    case 2:                        y = y + 1;//向下走                        break;                    case 3:                        x = x - 1;//向右走                        break;                }                //如果碰壁就往回走                if (st[s] > 4 || x < 0 || y < 0 || x >= 12 || y >= 8 || ary_map[y, x] == 1 || ary_map[y, x] == -1)                {                Loop://判断方向,回退到上一步                    switch (st[s])                    {                        case 0:                            y = y + 1;                            break;                        case 1:                            x = x - 1;                            break;                        case 2:                            y = y - 1;                            break;                        case 3:                            x = x + 1;                            break;                    }                    //换一个方向                    st[s] = st[s] + 1;                    //所有方向都走不通就返回上一步                    if (st[s] > 3)                    {                        st[s] = 0;                        s = s - 1;                        if (s > 0)                            goto Loop;                    }                }                else                {                    //将走过的路径设为-1                    ary_map[y, x] = -1;                    //下一步                    s = s + 1;                    if (x == 11 && y == 7)                    {                        break;                    }                }            }            //询址结束            //输出路径            x = 0;            y = 0;            string txt=string.Empty;            for (int i = 0; i < s; i++)            {                switch (st[i])                {                    case 0:                        y = y - 1;                        break;                    case 1:                        x = x + 1;                        break;                    case 2:                        y = y + 1;                        break;                    case 3:                        x = x - 1;                        break;                }                if (st[i] <= 0)                {                    break;                }                else                {                    txt = (txt == "" ? "" : txt + ",") + string.Format("(x:{0},y:{1})", x, y);                }            }            Response.Write(string.Format("<p>路径为:(x:0,y:0),{0}</p>", txt));        } 





[解决办法]

[解决办法]
学习了!!!惭愧!!!
[解决办法]

好长。。。
[解决办法]
好,多谢楼主。有时间研究研究。
[解决办法]

[解决办法]

[解决办法]
好好学习,天天向上。
[解决办法]
好牛 仰望ing
[解决办法]
学习,好长啊。
[解决办法]
留个名先。。
[解决办法]
这么牛,见到算法就头疼~~~
[解决办法]
学习了,很好很强大。。。
[解决办法]
算法 程序员思维训练必须啊
[解决办法]
果然高手啊
[解决办法]
还真牛呢,好好学习.

[解决办法]
mark
[解决办法]
mark
[解决办法]
mark
[解决办法]
高手,佩服....
[解决办法]
支持,支持,支持。
[解决办法]
必须的
探讨
版主啊,这个是学习资料,希望能来个推荐

[解决办法]
长期关注业务实现,
的确是把这些基础的算法都忘记了....
[解决办法]
谢谢楼主分享!
[解决办法]
算法确实是个好东西~
[解决办法]

[解决办法]
探讨

长期关注业务实现,
的确是把这些基础的算法都忘记了....

[解决办法]
关注下吧,回帖无罪
[解决办法]
谢谢楼主分享!
[解决办法]
谢谢楼主分享!
[解决办法]
学习了!
谢谢LZ分享!
[解决办法]
楼主牛人
[解决办法]

好长,,楼主很厉害了。。。
[解决办法]
牛人啊
------解决方案--------------------


惭愧,学习了
[解决办法]
惭愧,学习了
[解决办法]
收藏留名
[解决办法]
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
[解决办法]
没仔细看 仰望了
[解决办法]
哇估计啊就嘎
[解决办法]

强大哦!
[解决办法]

[解决办法]
强大,学习
[解决办法]
学习学习
[解决办法]
感谢楼主分享!
[解决办法]

[解决办法]
仰视。。。。。。。。
[解决办法]
不错!学习了!
[解决办法]
我还不知道什么叫回朔算法呢!!
[解决办法]
不错!学习了!
[解决办法]
mark
[解决办法]
好,学习来了.
[解决办法]
mark
[解决办法]
mark,学习了
[解决办法]
接分 lz谢谢
[解决办法]
标记一下啊。
[解决办法]
顶!每天回帖即可获得10分可用分!
[解决办法]
标记学习下。。。
[解决办法]
顶起啊.!
[解决办法]
顶礼膜拜
[解决办法]
好牛 仰望ing
[解决办法]
不知道还有我的分吗
[解决办法]

[解决办法]
惭愧,不懂算法!
[解决办法]
仰止。。。
[解决办法]
好久没用算法了,惭愧呀
[解决办法]
不错,支持
[解决办法]
很好很强大、、、不惭愧(因为才刚接触....)
[解决办法]
支持 力顶
[解决办法]


[解决办法]
挺一下
[解决办法]
我决定了,本文已阅!
[解决办法]
我看看 不说话,偷偷的学习~~
[解决办法]
楼主很强大
[解决办法]
支持,支持,支持。
[解决办法]
神贴哦 留名哦
[解决办法]
不错,顶一个。。
[解决办法]

[解决办法]
顶一个。。。。。。。。。。。。。。。。。。。。。。
[解决办法]
记录下
[解决办法]

[解决办法]
mark
[解决办法]
需要研究下
[解决办法]
貌似蛮牛
[解决办法]

探讨
貌似蛮牛

[解决办法]
很久没有研究算法了~~哈ha ~~
[解决办法]
很强大啊!
[解决办法]
学习学习·
[解决办法]
MARK
[解决办法]
顶下。。。
[解决办法]
学习了!!!惭愧!!!
[解决办法]
学习了
[解决办法]
学习了
[解决办法]
这个贴是要干嘛的,是让发一些算法题吗
[解决办法]
mark了漫漫看了

热点排行