• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Why so serious? --[NKU]schindlerlee

            2010年1月9日星期六.sgu125

            2010年1月9日星期六.sgu125
            sgu125:搜

            題意還是很好理解的,給出一個N*N的矩陣,B[i][j]表示周圍有多少個元素比他大,每個元素的取值范圍是1-9,最大的復雜度是9^9次方,大約需要5s才能跑出來,肯定需要優化。

            由于題目中的限制很多,非常容易想到判斷當前B的合法性來判斷。
            仔細想想,加上一個或者兩個剪枝就可以了。

            貼個超級丑陋的代碼。。。。 這個題的代碼寫的確實不太好
              1 /* 
              2  * SOUR:sgu125
              3  * ALGO:dfs
              4  * DATE: 2010年 01月 08日 星期五 22:46:13 CST
              5  * COMM:3 http://www.shnenglu.com/schindlerlee/
              6  * */
              7 #include<iostream>
              8 #include<cstdio>
              9 #include<cstdlib>
             10 #include<cstring>
             11 #include<algorithm>
             12 using namespace std;
             13 typedef long long LL;
             14 const int maxint = 0x7fffffff;
             15 const long long max64 = 0x7fffffffffffffffll;
             16 const int N = 8;
             17 int A[N][N];
             18 int B[N][N],n;
             19 int S[N][N];
             20 
             21 #define PUSH(x,y) (S[x][y]++)
             22 #define POP(x,y) (S[x][y]--)
             23 #define legal(x,y) (S[x][y] <= B[x][y])
             24 
             25 bool dfs(int x, int y)
             26 {
             27   if (y == n + 1) {
             28       x++, y = 1;
             29   }
             30 
             31   if (x == n + 1) {
             32       for(int i = 1;i <= n;i++) {
             33           for(int j = 1;j <= n;j++) {
             34               if(S[i][j] != B[i][j]) return false;
             35           }
             36       }
             37       return true;
             38   }
             39   if(x == 3 && y == 1) {
             40       if(S[1][1!= B[1][1||
             41          S[1][2!= B[1][2||
             42          S[1][3!= B[1][3])
             43         return false;
             44   }
             45 
             46   for (int i = 1; i <= 9; i++) {
             47       A[x][y] = i;
             48       if (x > 1 && A[x][y] > A[x - 1][y]) {
             49           PUSH(x - 1, y);
             50           if (y > 1 && A[x][y] > A[x][y - 1]) {
             51               PUSH(x, y - 1);
             52               if(legal(x-1,y) && legal(x,y-1&& dfs(x,y+1)) return true;
             53               else {
             54                   POP(x-1,y);
             55                   POP(x,y-1);
             56               }
             57           } else if (y > 1 && A[x][y] < A[x][y - 1]) {
             58               PUSH(x, y);
             59               if(legal(x-1,y) && legal(x,y) && dfs(x,y+1)) return true;
             60               else {
             61                   POP(x-1,y);
             62                   POP(x,y);
             63               }
             64           } else {
             65               if(legal(x-1,y) && dfs(x,y+1)) return true;
             66               else {
             67                   POP(x-1,y);
             68               }
             69           }
             70       } else if (x > 1 && A[x][y] < A[x - 1][y]) {
             71           PUSH(x, y);
             72           if (y > 1 && A[x][y] > A[x][y - 1]) {
             73               PUSH(x, y - 1);
             74               if(legal(x,y) && legal(x,y-1&& dfs(x,y+1)) return true;
             75               else {
             76                   POP(x,y);
             77                   POP(x,y-1);
             78               }
             79           } else if (y > 1 && A[x][y] < A[x][y - 1]) {
             80               PUSH(x, y);
             81               if(legal(x,y) && dfs(x,y+1)) return true;
             82               else {
             83                   POP(x,y);
             84                   POP(x,y);
             85               }
             86           } else {
             87               if(dfs(x,y+1)) return true;
             88               else {
             89                   POP(x,y);
             90               }
             91           }
             92       }else {
             93           if (y > 1 && A[x][y] > A[x][y - 1]) {
             94               PUSH(x, y - 1);
             95               if(dfs(x,y+1)) return true;
             96               else {
             97                   POP(x,y-1);
             98               }
             99           } else if (y > 1 && A[x][y] < A[x][y - 1]) {
            100               PUSH(x, y);
            101               if(dfs(x,y+1)) return true;
            102               else {
            103                   POP(x,y);
            104               }
            105           } else {
            106               if(dfs(x,y+1)) return true;
            107               else {
            108               }
            109           }
            110       }
            111   }
            112   return false;
            113 }
            114 
            115 int main()
            116 {
            117   int i, j, k;
            118   scanf("%d"&n);
            119   for (i = 1; i <= n; i++) {
            120       for (j = 1; j <= n; j++) {
            121           scanf("%d"&B[i][j]);
            122       }
            123   }
            124 
            125   if (dfs(11)) {
            126       for(int i = 1;i <= n;i++) {
            127           for(int j = 1;j <= n;j++) {
            128               printf("%d ",A[i][j]);
            129           }
            130           putchar(10);
            131       }
            132   }else {
            133       puts("NO SOLUTION");
            134   }
            135   return 0;
            136 }
            137 

            posted on 2010-01-09 01:57 schindlerlee 閱讀(1295) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告

            精品久久香蕉国产线看观看亚洲| 久久久久夜夜夜精品国产| 久久亚洲2019中文字幕| 伊人久久无码精品中文字幕| 国产高潮国产高潮久久久| 国产精品永久久久久久久久久| 亚洲婷婷国产精品电影人久久| 国产产无码乱码精品久久鸭| 久久露脸国产精品| 久久成人国产精品| 思思久久99热只有频精品66| 久久99国产精品二区不卡| 久久强奷乱码老熟女网站| 久久久精品人妻一区二区三区四| 国产91久久综合| 日韩精品久久久久久免费| 国产精品99久久久久久董美香| 亚洲色婷婷综合久久| 亚洲日本va午夜中文字幕久久| WWW婷婷AV久久久影片| 久久只有这里有精品4| 国产精品熟女福利久久AV| 久久久久免费看成人影片| 久久国产AVJUST麻豆| 色综合久久88色综合天天| 麻豆亚洲AV永久无码精品久久| 一级做a爰片久久毛片看看| 国产一区二区三精品久久久无广告 | 97视频久久久| 国产精品视频久久久| 无码久久精品国产亚洲Av影片| 久久无码国产| 久久综合伊人77777| 青青青国产成人久久111网站| 久久精品人人槡人妻人人玩AV | 久久er热视频在这里精品| 漂亮人妻被黑人久久精品| 久久精品国产亚洲AV久 | 久久精品国产网红主播| 一本一本久久aa综合精品| 一本久久知道综合久久|