• <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 閱讀(1296) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告

            99国产欧美精品久久久蜜芽| 久久亚洲精品无码VA大香大香 | 91秦先生久久久久久久| 青青草原综合久久大伊人精品| 热re99久久精品国产99热| 久久中文精品无码中文字幕| 性高湖久久久久久久久| 精品久久久久久国产| 香蕉99久久国产综合精品宅男自| 99久久99久久精品国产片果冻| 91精品国产91久久久久久| 久久精品中文字幕大胸| www.久久热.com| 午夜精品久久久久久影视riav| 91精品国产综合久久婷婷| 一97日本道伊人久久综合影院| 久久超碰97人人做人人爱| 久久久午夜精品福利内容| 一本大道久久a久久精品综合| 亚洲午夜久久久影院| 久久影院久久香蕉国产线看观看| 久久国产精品久久久| 三上悠亚久久精品| 伊人久久大香线焦AV综合影院| 亚洲国产一成久久精品国产成人综合 | 久久久噜噜噜www成人网| 亚洲精品99久久久久中文字幕 | 久久综合九色综合久99| 国产A级毛片久久久精品毛片| 色欲综合久久躁天天躁| 国产无套内射久久久国产| avtt天堂网久久精品| 久久夜色精品国产噜噜噜亚洲AV| 午夜精品久久久久9999高清| 精品久久人人妻人人做精品| 91久久福利国产成人精品| 91麻精品国产91久久久久| 精品国产综合区久久久久久| 久久高潮一级毛片免费| 久久夜色精品国产亚洲av| 久久婷婷午色综合夜啪|