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

            亚洲国产精品婷婷久久| 2020久久精品亚洲热综合一本 | 久久精品国产亚洲AV不卡| 久久久久黑人强伦姧人妻 | 中文字幕日本人妻久久久免费| 亚洲国产精品久久电影欧美| 精品国产91久久久久久久| 精品国产乱码久久久久软件| 久久99国内精品自在现线| 久久久综合香蕉尹人综合网| 久久狠狠高潮亚洲精品| 日日狠狠久久偷偷色综合96蜜桃 | 欧美激情精品久久久久| 久久亚洲AV无码精品色午夜麻豆| 久久免费精品视频| 99精品久久精品一区二区| 久久性生大片免费观看性| 久久久久亚洲AV无码专区体验| 亚洲国产天堂久久久久久 | 久久久久久免费视频| 人人狠狠综合久久亚洲88| 九九久久自然熟的香蕉图片| 亚洲国产小视频精品久久久三级 | 精品久久久久久无码中文字幕| 久久w5ww成w人免费| 18岁日韩内射颜射午夜久久成人| 欧美日韩成人精品久久久免费看| 久久九九亚洲精品| 97久久精品人妻人人搡人人玩| 亚洲中文字幕无码久久综合网| 亚洲人成电影网站久久| 色综合合久久天天给综看| 人妻精品久久久久中文字幕| 久久黄视频| 思思久久99热只有频精品66| 久久这里有精品视频| 久久久久无码中| 99久久综合国产精品免费| 久久精品成人欧美大片| 国内高清久久久久久| 久久亚洲精品人成综合网|