<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      8皇后問題SQL求解(回溯算法)

      問題

      八皇后問題是一個古老而著名的問題,是回溯算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出:在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法

      百度來的代碼

      回溯法用遞歸實現八皇后解法

      declare
        type t_queen is varray(8) of number;
        queen t_queen := t_queen(1, 2, 3, 4, 5, 6, 7, 8);
        l_num number := 0;
        -- 顯示“八皇后”
        procedure show(queen t_queen) is
        begin
          l_num := l_num + 1;
          dbms_output.put_line(rpad('---- NO. ' || l_num || ' ', 16, '-'));
          -- 從第1行顯示到第8行
          for r in 1 .. 8 loop
            -- 當前行,從第1列顯示到第8列
            for c in 1 .. 8 loop
              -- “皇后”用“Q”表示,空位用“.”表示
              dbms_output.put(case when queen(r) = c then 'Q' else '.'
                              end || ' ');
            end loop;
            dbms_output.put_line(null);
          end loop;
        end;
        -- 沖突檢測。檢測第row行與第1行至第row-1行是否沖突。
        -- 不沖突,返回true;沖突返回false
        function is_ok(queen t_queen, row number) return boolean is
          t number;
        begin
          for r in 1 .. row - 1 loop
            if queen(r) = queen(row) then
              -- 第row行與第r行的皇后在同一列上,沖突
              return false;
            end if;
            t := queen(r) - queen(row);
            if t = r - row or t = row - r then
              -- 第row行與第r行的皇后在同一斜線上,沖突
              return false;
            end if;
          end loop;
          return true;
        end;
        -- 遞歸查找所有排列
        procedure find(queen in out t_queen, row number) is
        begin
          for col in 1 .. 8 loop
            -- 每一行列的位置從第1列到第8列檢測
            queen(row) := col;
            if is_ok(queen, row) then
              if row = 8 then
                -- 已經查找到第8行,查找結束,顯示結果
                show(queen);
                return;
              end if;
              find(queen, row + 1); -- 尚未查找到第8行,第歸查找一下行
            end if;
          end loop;
        end;
      begin
        find(queen, 1); -- 從第1行開始查找
      end;
      

      運行結果

      image

      共92種結果

      還有百度到了另外一種更簡潔的寫法

      利用Oracle 11R2版本的遞歸屬性,算法很簡單,也就是在斜線上,直線上無沖突即可

      with sou as (
           select level n,1 k from dual connect by  level<=8
      ),
           ntt(n,k) as (
           select sou.n ,sou.k  from sou where k=1
           union all
           select ntt.n*10+a.n
                  ,ntt.k+1 
           from ntt,sou a
           where not exists(select 1
                            from  (select level b1 from dual connect by level<=7) t
                            where t.b1<=ntt.k and (
                                   a.n=to_number(substr(to_char(ntt.n),b1,1)) or
                                   a.n=to_number(substr(to_char(ntt.n),b1,1))+(ntt.k+1-t.b1) or
                                   a.n=to_number(substr(to_char(ntt.n),b1,1))-(ntt.k+1-t.b1)
                                   )
                           ) and ntt.k<=7
           )
      select n from ntt where ntt.k=8  ;
      

      也是92種結果image

      結果是一個數字表示在棋盤上的位置,也可以改一下用兩位整數表示一個棋位,這樣可以擴展到10皇后以上

      時間因素:image也即每增加一個皇后,增加的時間約為上一個的e(x+1)倍

      posted @ 2019-09-20 11:24  九命貓幺  閱讀(1282)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 老少配老妇老熟女中文普通话| 大伊香蕉精品一区二区| 人妻精品无码一区二区三区| 国产在线98福利播放视频| 成人欧美一区二区三区在线观看| 久久无码av中文出轨人妻| 亚洲熟妇熟女久久精品综合| 久久精品国产亚洲av麻豆长发| 亚洲国产欧美一区二区好看电影 | 国产亚洲一二三区精品| 乱人伦中文字幕成人网站在线| 91精品国产自产在线蜜臀| 最近中文字幕日韩有码| 亚洲成人四虎在线播放| 夜夜夜高潮夜夜爽夜夜爰爰| aⅴ精品无码无卡在线观看| 亚洲女同精品久久女同| 日本不卡一区| 久久热精品视频在线视频| 亚洲 日本 欧洲 欧美 视频| 亚洲制服无码一区二区三区| 精品亚洲一区二区三区在线观看| 精品无套挺进少妇内谢| 亚洲午夜伦费影视在线观看| 熟女丰满老熟女熟妇| 尤物国产精品福利在线网| 免费国产一区二区不卡| 丰满人妻被黑人连续中出| 久久久久青草线蕉综合超碰| 国产精品日韩av在线播放| 国产伦一区二区三区久久| 国产精品中文字幕二区| 最新国产AV最新国产在钱| 日本一卡2卡3卡四卡精品网站| 色国产视频| 色综合久久夜色精品国产| 国产精品久久久久7777| 在线看无码的免费网站| 九九热在线视频观看最新| 国产亚洲av手机在线观看| 精品国产一区二区三区香|