/*【題目**】
【題目分析】
幾張疊在一起,給出堆疊後的情況,要求出所有可能的從下到上的堆疊順序。
【思路分析】
1.題目已經很明確的告訴每個邊框的每條邊,至少會有乙個字母露在外面
所以遍歷整張圖,確定每個邊框的範圍。 只需確定左上角和右下角即可。
2.根據每個邊框的範圍再遍歷,若應該出現a的位置出現了b,那麼b一定在a上面。這樣各個邊框的上下順序就求出來。
若b在a上面,那麼記錄a->b。
3.拓撲排序
4.要求輸出所有能情況且按字母順序輸出。那麼只要按照字母順序使用dfs(遞迴)來解決,注意處理完入度為0的點(刪邊更新入度)
遞迴進去後要還原回來(刪去的邊弄回來,入度更新回來)。從而保證可以下次使用
【小小心得】
參考了網上**;拓撲排序的遞迴用法
*/#include
#include
#include
#include
#include
using
namespace
std;
struct
frame
};//
記錄26個字母使用了哪些
bool used[26
];//
入度 int into[26
];//
儲存拓撲排序的圖
int map[26][26
];//
輸入的原始圖
char matrix[32][32
];vector
ans;
//建立拓撲排序的圖 即更新into陣列
void
buildmap(frame frame)
}if (matrix[j][frame[i].y2] != i+'a'
) }}
//遍歷frame第一行和最後一行
for (int j = frame[i].y1; j <= frame[i].y2; ++j)
}if (matrix[frame[i].x2][j] != i+'a'
) }}
}}
}
//depth用於判斷遞迴了多少次
void topo(int depth, int
count)
for (int i = 0; i < 26; ++i)
}topo(depth+1
, count);
//還原
ans.pop_back();
into[i] = 0
;
for (int k = 0; k < 26; ++k)
} }}
}}int
main()}}
buildmap(frame);
//一共用了多少個字母
int count = 0
;
for (int i = 0; i < 26; ++i)
if(used[i])
count++;
topo(
0, count);
}}
框架 應用框架
框架也是一種重用方式,重用粒度比構件大,與物件導向技術關係密切。1定義 框架johnson 框架 模式 構件。框架是由開發人員定製的應用系統的骨架 skeleton 是整個系統或子系統的可重用設計,由一組抽象構件和構件例項間的互動方式組成。應用框架 buschmann 特定領域應用的框架。框架技術 ...
前期框架 Bootstrap框架
1.什麼是css框架 封裝了很多重複的工作 提高了開發的效率 隨著web應用變得越來越複雜。在大量的開發過程中,我們發現有許多的功能模組非常相似。例如輪播圖,分頁,導航,進度條,模態框等,每一次都手動書寫無疑是在做重複工作。框架的作用就是把這些功能封裝稱為乙個個元件,在開發過程中直接拿過來使用即可,...
python caffe框架 caffe框架基礎
caffe的核心模組 caffe是乙個清晰而高效的深度學習框架,其作者是博士畢業於uc berkeley的賈揚清,目前在google工作。caffe是純粹的c cuda架構,支援命令列 python和matlab介面 可以在cpu和gpu直接無縫切換。caffe的核心模組有三個,分別是blobs l...