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

            亚洲精品久久久www| 久久精品国产亚洲AV香蕉| 狠狠精品干练久久久无码中文字幕| 久久99精品久久久久久久不卡 | 精品久久久无码人妻中文字幕| 久久久久av无码免费网| 久久99精品久久只有精品| 精品视频久久久久| 亚洲精品tv久久久久久久久| 久久夜色tv网站| 精品久久亚洲中文无码| 亚洲综合精品香蕉久久网97| 亚洲色欲久久久综合网东京热| 99久久www免费人成精品 | 无码任你躁久久久久久老妇App| 亚洲AV成人无码久久精品老人| 久久99精品综合国产首页| 欧美麻豆久久久久久中文| 久久青青草原亚洲av无码app| 婷婷久久综合九色综合绿巨人| 欧美一区二区三区久久综合| 午夜精品久久久久| 久久精品成人免费观看97| 久久这里只有精品首页| 久久偷看各类wc女厕嘘嘘| 亚洲国产精品综合久久网络| 色综合久久天天综合| 国产V亚洲V天堂无码久久久| 囯产极品美女高潮无套久久久 | 精品伊人久久大线蕉色首页| 久久久久综合中文字幕| 亚洲v国产v天堂a无码久久| 精品久久久久久中文字幕| 久久久久久午夜成人影院| 99久久国产宗和精品1上映| 美女久久久久久| 少妇被又大又粗又爽毛片久久黑人 | 蜜桃麻豆www久久| 一级做a爰片久久毛片16| 热久久这里只有精品| 大香网伊人久久综合网2020|