数独递归AI算法[含源码下载]

今天在群里面谈到数值的遍历 想起了早前写的一个数独小程序,在此连码一起发上来吧.

//=========核心处理方法========
//==================处理函数====================
取字符数组 = function (文本) {
    var 返回值 = new Array();
    for (var i = 0; i<文本.length; i++) {
        返回值.push(文本.charAt(i));
    }
    return 返回值.sort();
};
//this[字符数组.join("")] = new Object();
拆出名字 = function (字符数组) {
    var 对象名 = new Array();
    for (var i = 0; i<字符数组.length; i++) {
        对象名.push(字符数组.join(""));
        字符数组.push(字符数组.shift());
    }
    return 对象名;
};
生成对象 = function (对象:Object, 字符数组:Array) {
    var 对象名表 = 拆出名字(字符数组);
    for (var i = 0; i<对象名表.length; i++) {
        对象[对象名表[i]] = new Object();
        对象[对象名表[i]].名字 = 对象名表[i];
        对象[对象名表[i]].前名段 = 对象名表[i].charAt(0);
        var 取后名字符 = 对象[对象名表[i]].名字.substr(1);
        var 拆名数组 = 取字符数组(取后名字符);
        //trace("原名="+对象[对象名表[i]].名字+" 取出后="+取后名字符+" 处理结果="+拆名数组);
        if (对象[对象名表[i]].名字.length>2) {
            生成对象(对象[对象名表[i]], 拆名数组);
            delete 对象[对象名表[i]].名字;
        } else {
            delete 对象[对象名表[i]].前名段;
        }
        //目前可删                                      
    }
};
//
//
//用于结束最后的2位数互换
取名字 = function (对象:Object, 前段名) {
    for (var i in 对象) {
        if (typeof (对象[i]) == "object") {
            if (对象[i].前名段 != undefined) {
                if (名字.charAt(名字.length) != 对象[i].前名段) {
                    名字 += 对象[i].前名段;
                    取名字(对象[i], 名字);
                }
            } else {
                //trace("未加前="+前段名+" 追加名字="+对象[i].名字+" 结束名="+前段名+对象[i].名字);
                结果数组.push(前段名+对象[i].名字);
            }
        }
    }
    //trace("名字="+名字);
    名字 = substring(名字, 0, 名字.length-1);
};
组成名字表 = function (主对象) {
    for (var i in 主对象) {
        名字 = 主对象[i].前名段;
        //trace("");
        //trace("前字段="+名字);
        取名字(主对象[i], 名字);
    }
};
//
//=============================================
//
//===========执行函数=======
//执行原理:字符串->数组->结构对象->归类追加到结果数组
function 递归求可能() {
    结果数组 = new Array();
    var 数值 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    //找出推理参数值,去掉
    for (var i = 0; i<数值.length; i++) {
        if (数值[i] == Number(推理参数)) {
            数值.splice(i, 1);
            break;
        }
    }
    //添加递归字符串
    var 字符串 = "";
    for (var i = 0; i<数值.length; i++) {
        字符串 += 数值[i];
    }
    trace("递归字符串="+字符串);
    var 字符数组 = new Array();
    字符数组 = 取字符数组(字符串);
    //生成主对象
    var 主对象 = new Object();
    生成对象(主对象, 字符数组);
    组成名字表(主对象);
    return true;
}
thisObj = this;
for (var i = 1; i<9; i++) {
    thisObj["题目"+i].onRelease = function() {
        var ID = Number(this._name.substr(2));
        gotoAndStop(ID+1);
    };
}
//=====================================
//
//转载请注明出处:羽柴 鬼铃-blog  www.ycflash.com/blog
//
//=====================================
//其余的请下载源码查看吧.


下载文件 点击下载此文件


[本日志由 admin 于 2009-03-03 04:12 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 2 | 引用: 0 | 查看次数: 1194
回复回复admin[2009-04-08 04:17 PM | del]
HI~
回复回复mygia[2009-03-13 10:56 AM | del]
坐上沙发了!
发表评论
你没有权限发表评论!