青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

我希望你是我獨家記憶

一段永遠封存的記憶,隨風而去
posts - 263, comments - 31, trackbacks - 0, articles - 3
   :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

USACO——443——(拓撲排序)

Posted on 2008-08-16 23:02 Hero 閱讀(194) 評論(0)  編輯 收藏 引用 所屬分類: 代碼如詩--ACM
/*
ID: wangzha4
LANG: C++
TASK: frameup
*/
//JUDGE_ID: 65448BI
/*

   Test 1: TEST OK [0.000 secs, 3312 KB]
   Test 2: TEST OK [0.000 secs, 3312 KB]
   Test 3: TEST OK [0.011 secs, 3312 KB]
   Test 4: TEST OK [0.000 secs, 3308 KB]
   Test 5: TEST OK [0.000 secs, 3444 KB]
   Test 6: TEST OK [0.000 secs, 3308 KB]
   Test 7: TEST OK [0.000 secs, 3308 KB]
   Test 8: TEST OK [0.011 secs, 3440 KB]
   Test 9: TEST OK [0.043 secs, 3440 KB]
*/
//拓撲排序的題目--輸出所有可能的拓撲排序--按字典序
/*

具體思路 :
1. 讀入數據,用used[]記錄那些字符被使用過,并將字符hash到
   從小到大的數字cnt,用mymap[]數組來將數字hash回相應的字符
2. 尋找矩形框--找到每種字符最大和最小的行列,存放在node[]數組中

3. 構建圖形edge[][]--掃描輸入,對于每個字母,按照矩形框掃描四個邊
   如果掃描到不相同的字母,建立一條有向邊,edge[][]=1
4. DFS_Topsort()--對于已經建立好的有向邊利用深度優先搜索排序
5. 輸出所有的拓撲序列
*/
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
#include 
<ctype.h>
#include 
<math.h>

#define unllong unsigned long long 
#define unint unsigned int
#define printline  printf( "\n" ) 
typedef 
long long llong ;
//const double PI = 2.0 * acos( 0.0 ) ;

const int Base=1000000000;
const int Capacity=100;
const int INF = 1000000 ;
const int size = 35 ;

struct NODE
{
    
int minr, minc ;
    
int maxr, maxc ;
};
struct NODE node[28] ;

char data[size][size] ;

int used[200] ;//把字符映射成數字
char mymap[200] ;//把數字映射成字符
int cnt ;//記錄映射的最大數字--圖的最大頂點標號

int edge[30][30] ;//構建有向圖
int indeg[30] ;//記錄所有的點的入度

int row, col ;

char topout[30] ;//暫存生成的拓撲序列

struct OUT 
{
    
char str[30] ;
};
struct OUT out[20000] ;
int ct_out ;

int fmax( int a, int b )
{
    
if( a > b )    return a ;
    
else        return b ;
}

int fmin( int a, int b )
{
    
if( a < b )    return a ;
    
else        return b ;
}

void input()
{
    memset( used, 
0sizeof(used) ) ;
    memset( mymap, 
0sizeof(mymap) ) ;
    memset( indeg, 
0sizeof(indeg) ) ;
    memset( edge, 
0sizeof(edge) ) ;

    cnt 
= 1 ;
    
forint i=0; i<row; i++ ) { 
        scanf( 
"%s", data[i] ) ;
        
forint j=0; j<col; j++ ) {
            
if'.' == data[i][j] ) continue ;
            
if( used[data[i][j]] )    continue ;
            used[data[i][j]] 
= cnt ; mymap[cnt++= data[i][j] ;
        }
//建立相互映射
    }

    
forint i=0; i<=26; i++ ) {
        node[i].minr 
= node[i].minc = INF ;
        node[i].maxr 
= node[i].maxc = -1 ;
    }
//初始化每個字母的最小最大行列
}

void find_degree()
{
    
forint i=1; i<cnt; i++ )
        
forint j=1; j<cnt; j++ )    
            indeg[i] 
+= edge[j][i] ;
}

void DFS_Topsort( int sn, int tdep )
{
    
int back[30] ;//深搜的用于暫存狀態的數組
    forint i=1; i<cnt; i++ ) back[i] = indeg[i] ;

    
if( sn == tdep )
    {
        
//printf( "=======%s\n", topout ) ;
        strcpy( out[ct_out].str, topout ) ;
        ct_out
++ ;
        
return ;
    }
    
forint i=1; i<cnt; i++ )
    {
        
if0 == indeg[i] ) { 
            topout[sn] 
= mymap[i] ; indeg[i] = -1 ; 
            
forint k=1; k<cnt; k++ ) 
                
if( edge[i][k] ) indeg[k]-- ;//入度減1

            DFS_Topsort( sn
+1, tdep ) ;

            
forint k=1; k<cnt; k++ ) indeg[k] = back[k] ;
        }
    }
}

void find_edge( int curn )
{
//對四個邊進行查找--尋找矩形框
    int minr = node[curn].minr ; int minc = node[curn].minc ;
    
int maxr = node[curn].maxr ; int maxc = node[curn].maxc ;

    
int nodex, nodey ; nodey = used[curn+'A'] ;
    
forint k=minc; k<=maxc; k++ )
    {
        
if( data[minr][k]!='.'&&data[minr][k]!=curn+'A' ) {
            nodex 
= used[data[minr][k]] ; edge[nodey][nodex] = 1 ;
        }
        
if( data[maxr][k]!='.'&&data[maxr][k]!=curn+'A' ) {
            nodex 
= used[data[maxr][k]] ; edge[nodey][nodex] = 1 ;
        }
    }
    
forint k=minr; k<=maxr; k++ )
    {
        
if( data[k][minc]!='.'&&data[k][minc]!=curn+'A' ) {
            nodex 
= used[data[k][minc]] ; edge[nodey][nodex] = 1 ;
        }
        
if( data[k][maxc]!='.'&&data[k][maxc]!=curn+'A' ) {
            nodex 
= used[data[k][maxc]] ; edge[nodey][nodex] = 1 ;
        }
    }
}

void build_graph()
{
    
forint i=0; i<row; i++ ) {
        
forint j=0; j<col; j++ ) {
            
if'.' == data[i][j] )    continue ;
            find_edge( data[i][j] 
- 'A' ) ;
        }
    }
    
forint i=1; i<cnt; i++ ) edge[i][i] = 0 ;
}

void process()
{
    
int curnode ;
    
forint i=0; i<row; i++ ) {
        
forint j=0; j<col; j++ ) {
            
if( data[i][j] != '.' ) {
                curnode 
= data[i][j] - 'A' ;
                node[curnode].minr 
= fmin( node[curnode].minr, i ) ;
                node[curnode].minc 
= fmin( node[curnode].minc, j ) ;
                node[curnode].maxr 
= fmax( node[curnode].maxr, i ) ;
                node[curnode].maxc 
= fmax( node[curnode].maxc, j ) ;
            }
        }
    }
//尋找每個字母的矩形框

    build_graph() ; 
//建圖

    find_degree() ;
//計算入度

    ct_out 
= 0 ;
    DFS_Topsort( 
0, cnt-1 ) ;//拓撲排序
}

int cmp( const void *a, const void *b )
{
    
struct OUT *= (struct OUT *)a ;
    
struct OUT *= (struct OUT *)b ;

    
return strcmp( c->str, d->str ) ;
}

void output()
{
    qsort( 
out, ct_out, sizeof(out[1]), cmp ) ;

    
forint i=0; i<ct_out; i++ )
    {
        printf( 
"%s\n"out[i].str ) ;
    }
}

int main()
{
    freopen( 
"frameup.in""r", stdin ) ;
    freopen( 
"frameup.out","w",stdout ) ;

    
//freopen( "in.txt", "r", stdin ) ;

    
while( scanf( "%d %d"&row, &col ) != EOF )
    {
        input() ;

        process() ;

        output() ;
    }
    
return 0 ;
}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美午夜女人视频在线| 一本色道久久综合精品竹菊| 最近中文字幕日韩精品| 在线免费观看欧美| 亚洲成人资源| 一区二区三区蜜桃网| 亚洲天堂av图片| 久久精品国产一区二区三| 久久久99国产精品免费| 欧美电影免费网站| 在线一区亚洲| 久久久亚洲精品一区二区三区 | 一区二区三区国产精华| 亚洲网站在线播放| 欧美日韩系列| 欧美一区二区三区喷汁尤物| 久久精品国产精品亚洲综合| 免费在线观看日韩欧美| 欧美性猛交xxxx免费看久久久| 国产精品免费一区豆花| 精品av久久久久电影| 99re热精品| 久久久亚洲国产天美传媒修理工 | 伊人久久婷婷色综合98网| 亚洲精品视频在线观看网站| 午夜精品一区二区三区在线播放| 久久综合导航| 一区二区欧美在线观看| 久久免费视频观看| 国产精品日韩一区| 99国产精品自拍| 欧美+亚洲+精品+三区| 日韩视频在线一区二区三区| 欧美在线免费观看视频| 欧美天堂在线观看| 亚洲美女中文字幕| 久久亚洲影院| 午夜国产精品视频| 欧美午夜视频在线观看| 亚洲精品在线观看视频| 另类尿喷潮videofree| 亚洲欧美成人网| 欧美亚州韩日在线看免费版国语版| 亚洲国产精品久久久久秋霞影院| 欧美在线视频播放| 亚洲欧美日韩一区| 国产精品第三页| 国产精品99久久久久久www| 亚洲国产一区二区a毛片| 香蕉精品999视频一区二区 | 亚洲欧美变态国产另类| 国产精品扒开腿爽爽爽视频| 日韩天天综合| 亚洲激情图片小说视频| 欧美国产丝袜视频| 日韩天堂在线观看| 亚洲理论电影网| 欧美日韩国产一级| 亚洲视频一区| 中国av一区| 国产欧美日韩亚洲精品| 久久国产精品久久精品国产| 午夜老司机精品| 国产一区二区三区免费在线观看 | 亚洲电影免费观看高清完整版在线 | 国产精品视频| 亚洲三级网站| 久久久久国产精品一区二区| aⅴ色国产欧美| 麻豆国产精品一区二区三区| 欧美影院视频| 国产在线国偷精品产拍免费yy| 这里只有精品视频| 在线一区二区三区四区| 欧美日本三区| 一本久道久久综合婷婷鲸鱼| 亚洲精品自在久久| 欧美精品免费看| 日韩午夜在线电影| 欧美一级视频免费在线观看| 国产日韩精品在线播放| 久久久av水蜜桃| 亚洲国产欧美一区| 一区二区三区精密机械公司| 欧美日韩免费| 午夜精品一区二区三区电影天堂| 久久女同互慰一区二区三区| 91久久久国产精品| 国产精品资源在线观看| 久久亚洲私人国产精品va媚药| 欧美激情aaaa| 欧美亚洲视频一区二区| 亚洲人精品午夜| 国产精品爽黄69| 欧美黄色免费| 久久久国产精彩视频美女艺术照福利| 91久久久久久国产精品| 久久婷婷一区| 欧美精品v日韩精品v国产精品| 99精品国产在热久久下载| 久久精品99无色码中文字幕| 亚洲三级电影在线观看| 国产一区二区无遮挡| 国产精品视频久久| 欧美午夜精品伦理| 欧美日本中文字幕| 欧美日韩国产欧| 欧美日本国产一区| 欧美日韩日日骚| 国产精品久久久久天堂| 欧美日韩一区在线视频| 国产精品www.| 国产麻豆日韩| 一区一区视频| 最新国产成人在线观看| 99爱精品视频| 午夜在线一区二区| 欧美.www| 99精品久久| 久久久水蜜桃| 国产精品vvv| 尤物九九久久国产精品的分类| 在线成人h网| 亚洲一区二区在线视频| 欧美主播一区二区三区| 久久久夜夜夜| 亚洲人成高清| 久久成人18免费观看| 欧美精品情趣视频| 好男人免费精品视频| 亚洲日本成人| 久久久777| 亚洲一卡久久| 欧美护士18xxxxhd| 国产欧美精品在线观看| 亚洲精品你懂的| 欧美xx视频| 久久久久久久高潮| 国产视频欧美视频| 午夜在线成人av| 亚洲视频专区在线| 亚洲国产欧美一区二区三区同亚洲| 欧美一区二区三区精品电影| 欧美日韩伦理在线| 99ri日韩精品视频| 欧美大片va欧美在线播放| 亚洲欧美一区二区三区极速播放| 可以看av的网站久久看| 国产欧美日韩另类一区| 欧美一区二视频| 激情小说亚洲一区| 你懂的视频一区二区| 久久久久久久久久看片| 国产无一区二区| 久久美女性网| 久久久久久夜精品精品免费| 国内偷自视频区视频综合| 欧美一区二区三区精品| 午夜精品久久久久久久蜜桃app| 国产喷白浆一区二区三区| 久久久久成人精品| 久久一二三国产| 亚洲桃色在线一区| 久久精品亚洲国产奇米99| 亚洲国产人成综合网站| 一本一本久久a久久精品综合麻豆| 国产精品xnxxcom| 麻豆精品一区二区av白丝在线| 欧美成人免费在线观看| 西西裸体人体做爰大胆久久久| 亚洲欧美电影在线观看| 亚洲国产日韩欧美在线动漫| 在线亚洲精品| 91久久精品网| 久久久久国内| 欧美一区二区视频观看视频| 久久精品免费播放| 性做久久久久久久免费看| 老**午夜毛片一区二区三区| 亚洲影视综合| 欧美午夜精品伦理| 亚洲国产精品一区二区第四页av | 一区二区三区|亚洲午夜| 国产视频在线观看一区二区| 亚洲高清毛片| 久久亚洲一区二区三区四区| 久久成人综合视频| 国产模特精品视频久久久久| 亚洲素人一区二区| 欧美一区影院| 韩国精品久久久999| 欧美一级在线播放| 老司机免费视频久久| 国产亚洲人成a一在线v站| 午夜精品一区二区在线观看| 欧美资源在线| 亚洲成人在线观看视频| 麻豆精品一区二区综合av| 亚洲电影天堂av| 亚洲视频欧美视频|