poj 1094 之解法二 拓撲排序

2021-06-12 15:07:26 字數 1121 閱讀 6314

題目鏈結

題意:給出大於等於 a 小於 a +  n 的字母間的大小關係式,問是否能確定 n個字母的大小關係?如能,在第幾個關係式時能確定?如不能,是否出現了矛盾,在第幾個關係式時出現了矛盾?

關係式舉例如下:

a#include#include #include #includeusing namespace std;

int n, flag;

int result[27]; //拓撲排序結果存放陣列

int visited[27]; //拓撲排序時標識是否已訪問過

int map[27][27]; //map[i][j] = 1 表示從 i + 'a' 到 j + 'a' 之間有一條單向邊

int in[27]; //in[i] 存放 i + 'a' 的入度

/檢查是否有環

void floyd( int a, int b )

if( i == a && j == b )}}

} }}拓撲排序

bool toposort( )

} if( k == -1 )

return false;

result[size ++] = k;

visited[k] = 1;

更新有從已排序的當前節點有單向邊的節點的入度

for( j = 0; j < n; j ++ )

} return true;

}int main()

檢查是否有矛盾,即對環的檢查

floyd( b - 'a', a - 'a' );

if( flag == 1 )

printf( "inconsistency found after %d relations.\n", i );

else}}

}

if( flag == 0 )

printf("sorted sequence cannot be determined.\n");

} //fclose(stdin);

//fclose(stdout);

return 0;

}

POJ 1094 拓撲排序

文章大意是將n個字母排序 n 26 最終必須排成鍊錶式的輸出 一旦確定或者出現環,記錄當前步數,後續輸入無視 加個拓撲排序判斷圖的總結 1 如果輸入的有向圖中的點,不存在入度為0的點,則存在迴路,反過來則不成立 2 如果入隊的點的個數小於輸入的點的個數,則肯定存在迴路 3 如果存在的入度為零的點大於...

拓撲排序 poj1094

此題題目有點小問題,那也是很多人ac不了的原因 問題是,當給定的前k項條件能夠確定出大小順序時,即便k項之後出現了矛盾條件,輸出也應該是sorted sequence determined after k relations 後面再輸出排序好的序列!include include using nam...

POJ 1094 拓撲排序)

拓排 各種判 program p1094 type map3 record indegree array a z of longint map array a z 1.26 of char outdegree array a z of longint end var n,m,i,j,num,valu...