24小时热门版块排行榜    

查看: 514  |  回复: 1

wangcl8659

金虫 (小有名气)

[交流] 【求助】食人魔过程程序

食人魔过河问题
(1)三个传教士、三个食人魔和一条船在河的左岸
(2)传教士和食人魔都能撑船,船的最大准载量为2;而且当食人魔比传教士多时,食人魔会伤害传教士
(3)寻找一种渡河方案

最好是Java语言,其他也可以。
回复此楼
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wangcl8659

金虫 (小有名气)

余泽成:本版不鼓励未经思考的作业求助!退还金币,关闭此帖! 2010-08-15 16:14:01
这是网上找到的程序。
鉴于本人是纯管理类学生,不懂编程,但是由于作业要求,希望关注者帮忙调试,或者提供步骤,怎么把这个程序放到JAVA中,并设置页面



启发式函数是(numOfMiss + numOfCann + boatAt - 1) / (capacity - 1);



    /**

     * 启发式搜索方案

    */

    private void solveInAStar() {



        System.out.println("现在使用启发式搜索方案";



        Transport[][][] pre = new Transport[numOfMiss + 1][numOfCann + 1][2];



        long begin = initiation();



        Queue queue = new PriorityQueue();



        queue.add(new Status(numOfMiss, numOfCann, 0, -1, 0 + calF(numOfMiss,

                numOfCann, 0)));

        pre[numOfMiss][numOfCann][0] = new Transport(-1, -1, -1);

        dp[numOfMiss][numOfCann][0] = 0;



        boolean solution = false;



        while (!queue.isEmpty()) {



            Status now = queue.remove();



            int leftMiss = now.leftMiss;

            int leftCann = now.leftCann;

            int boatAt = now.boatAt;



            // System.out.printf("%d %d %d %d\n", leftMiss, leftCann, boatAt,

            // now.cost);



            if (leftCann == 0 && leftMiss == 0) {

                int idx = 0;

                while (true) {

                    Transport t = pre[leftMiss][leftCann][boatAt];

                    if (t.a == -1)

                        break;

                    steps[idx++] = t;

                    if (t.boatAt == 0) {

                        leftMiss += t.a;

                        leftCann += t.b;

                    } else {

                        leftMiss -= t.a;

                        leftCann -= t.b;

                    }

                    boatAt = 1 - boatAt;

                }



                for (int i = 0, j = idx - 1; i < j; ++i, --j) {

                    Transport tmp = steps;

                    steps = steps[j];

                    steps[j] = tmp;

                }



                OutputAnswer(idx);



                solution = true;



                break;

            }



            int i, j;



            if (boatAt == 0) {

                for (i = 0; i <= leftMiss && i <= capacity; ++i) {

                    for (j = 0; j <= leftCann && i + j <= capacity; ++j) {

                        if (i + j != 0) {

                            if (checkValidSmaller(leftMiss - i, leftCann - j,

                                    1 - boatAt, now.cost + 1)) {

                                queue.add(new Status(leftMiss - i,

                                        leftCann - j, 1 - boatAt, -1, now.cost

                                                + 1

                                                + calF(leftMiss - i, leftCann

                                                        - j, 1 - boatAt)));

                                dp[leftMiss - i][leftCann - j][1 - boatAt] = now.cost + 1;

                                pre[leftMiss - i][leftCann - j][1 - boatAt] = new Transport(

                                        i, j, boatAt);

                            }

                        }

                    }

                }

            } else {

                int rightMiss = numOfMiss - leftMiss;

                int rightCann = numOfCann - leftCann;

                for (i = 0; i <= rightMiss && i <= capacity; ++i) {

                    for (j = 0; j <= rightCann && i + j <= capacity; ++j) {

                        if (i + j != 0) {

                            if (checkValidSmaller(leftMiss + i, leftCann + j,

                                    1 - boatAt, now.cost + 1)) {

                                queue.add(new Status(leftMiss + i,

                                        leftCann + j, 1 - boatAt, -1, now.cost

                                                + 1

                                                + calF(leftMiss + i, leftCann

                                                        + j, 1 - boatAt)));

                                dp[leftMiss + i][leftCann + j][1 - boatAt] = now.cost + 1;

                                pre[leftMiss + i][leftCann + j][1 - boatAt] = new Transport(

                                        i, j, boatAt);

                            }

                        }

                    }

                }

            }

        }

        if (!solution)

            System.out.println("不存在解!";



        queue.clear();



        System.out.println("Time elapsed: "

                + (System.currentTimeMillis() - begin) + " minisecs.\n";



    }



    private int calF(int numOfMiss, int numOfCann, int boatAt) {

        return (numOfMiss + numOfCann + boatAt - 1) / (capacity - 1);

}
2楼2010-08-15 13:44:38
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wangcl8659 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +4 2rKfVQg2jQww 2026-11-06 5/250 2026-11-07 17:23 by Xc2FxHsHkBNc
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 5sJFDKp2kwuI 2026-11-06 5/250 2026-11-07 17:01 by Xc2FxHsHkBNc
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +3 5sJFDKp2kwuI 2026-11-06 4/200 2026-11-07 16:28 by Xc2FxHsHkBNc
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +4 5sJFDKp2kwuI 2026-11-06 6/300 2026-11-07 15:44 by Xc2FxHsHkBNc
[教师之家] 延安大学回应“副教授留绝笔信”:确已离世,正核实举报内容 +3 yexuqing 2026-11-04 5/250 2026-11-07 13:22 by 苏东坡二世
[考博] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +6 ELBZ6WwEaRj6 2026-11-05 8/400 2026-11-06 16:34 by 5sJFDKp2kwuI
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +6 ELBZ6WwEaRj6 2026-11-04 11/550 2026-11-06 16:32 by 5sJFDKp2kwuI
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +5 ttH3f1oA6ace 2026-11-04 10/500 2026-11-06 16:12 by 5sJFDKp2kwuI
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +4 ttH3f1oA6ace 2026-11-04 11/550 2026-11-06 16:10 by 5sJFDKp2kwuI
[公派出国] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +6 ttH3f1oA6ace 2026-11-04 12/600 2026-11-06 16:10 by 5sJFDKp2kwuI
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +7 ncTVBM6AOJHF 2026-11-04 17/850 2026-11-06 13:47 by BkA9Bi5cMhkD
[考研] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +8 ncTVBM6AOJHF 2026-11-04 18/900 2026-11-06 13:36 by BkA9Bi5cMhkD
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +5 ELBZ6WwEaRj6 2026-11-05 10/500 2026-11-06 12:32 by BkA9Bi5cMhkD
[硕博家园] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 ELBZ6WwEaRj6 2026-11-04 12/600 2026-11-06 05:32 by qL1cU46YIdK0
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 kvewwGtKktqB 2026-11-04 14/700 2026-11-06 05:10 by qL1cU46YIdK0
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 ELBZ6WwEaRj6 2026-11-04 9/450 2026-11-06 02:15 by qL1cU46YIdK0
[考博] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 ttH3f1oA6ace 2026-11-04 7/350 2026-11-06 02:13 by qL1cU46YIdK0
[考研] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +4 ttH3f1oA6ace 2026-11-04 10/500 2026-11-06 02:04 by qL1cU46YIdK0
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 ttH3f1oA6ace 2026-11-04 9/450 2026-11-06 02:02 by qL1cU46YIdK0
[基金申请] 各位基础老师们,看完中央《从严治党》的决定后,对学术界更加有信心了吧 +5 iaeyuan 2026-11-01 5/250 2026-11-04 14:43 by jinchengzi
信息提示
请填处理意见