題目鏈結poj1128
給定一張邊框覆蓋圖,求邊框從上到下的關係
如果在a的邊框上出現了字母b,就說明b在a的上方
如果邊框a在邊框b的下方,就新增從a到b的一條有向邊(題目要求從下到上輸出)
那麼所求的是所得有向無環圖的拓撲排序
題目還要求按照字典序輸出所有可能的順序,用深度優先搜尋
#include #includeview code#include
#include
#include
#include
#define max 1000007
#define maxn 50
#define maxm 1007
#define inf 0x3f3f3f3f
#define ninf 0xc0c0c0c0
#define mod 1000000007
using
namespace
std;
typedef
long
long
ll;int
head[maxn],tot,n,m,indegree[maxn],realn;
struct
edgeedge[maxm];
void addedge(int u,int
v)int visit[maxn],map[40][40],flag[40][40
],df[maxn];
struct
borderborder[maxn];
intqueue[maxn],iq;
void
init()}//
如果字母t在字母k的四條邊框上,則連線k到t的有向邊(從下到上的方向)
void adde(int k,int x1,int y1,int x2,int
y2) }
}}//
深度優先遍歷出所有的拓撲排序
void dfs(int now,int
k) printf("\n
");}
else
//從剩餘的點中選擇入度為0的點,從小到大遍歷
for(int i=1;i)
}//加回與now關聯的邊
for(int i=head[now];i!=-1;i=edge[i].next)
}}int
main()}}
for(int i=0;i)}}
for(int k=1;k<30;k++)
}//cout
}//cout
); }
return0;
}/*6 6bbbccc
baaaac
babcac
.adda.
.aaaa.
..dd..
*/
POJ1128 拓撲排序 DFS
看到題應該很容易想到利用拓撲排序來判斷相框之間的關係,對於每乙個相框,我們遍歷一遍可以找到他的 上下左右 四條邊的位置,再搜尋這幾條邊上是否有其他字母,有的話就新增乙個類似於a然後就是我個人認為的這道題的難點,怎麼按照字典序輸出所有可能答案,最開始我想的是利用bfs跑拓撲,確定每個點的層級,再對相同...
POJ 1094 拓撲排序
文章大意是將n個字母排序 n 26 最終必須排成鍊錶式的輸出 一旦確定或者出現環,記錄當前步數,後續輸入無視 加個拓撲排序判斷圖的總結 1 如果輸入的有向圖中的點,不存在入度為0的點,則存在迴路,反過來則不成立 2 如果入隊的點的個數小於輸入的點的個數,則肯定存在迴路 3 如果存在的入度為零的點大於...
拓撲排序 poj1094
此題題目有點小問題,那也是很多人ac不了的原因 問題是,當給定的前k項條件能夠確定出大小順序時,即便k項之後出現了矛盾條件,輸出也應該是sorted sequence determined after k relations 後面再輸出排序好的序列!include include using nam...