例如数据A和B可能是相等,但是A>C, C>B,要求排列的结果是
A C B(降序)或者 B C A(升序)的均当作有效。
要求给出算法描述和计算量分析。
排序最快的另外开帖子,多给100分。
提示:题目要求和前段时间的一个题目类似。
...全文
5534打赏收藏
这几天提问和回答的人都比较少,来一个一般难度的题目刺激一下。
假定有一组数据,数据之间存在一个比较关系,大于,小于或者是等于 给一个排序算法,把他们按照顺序排列起来。 例如数据A和B可能是相等,但是A>C, C>B,要求排列的结果是 A C B(降序)或者 B C A(升序)的均当作有效。 要求给出算法描述和计算量分析。 排序最快的另外开帖子,多给100分。 提示:题目要求和前段时间的一个题目类似。
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_N = 100;
enum Color { WHITE, GRAY, BLACK };
Color color[MAX_N]; // the state of the Node
int source[MAX_N]; // record the parent node
int graph[MAX_N][MAX_N];
int out[MAX_N];
int N,M;
bool incon;
void DFS_Visit(int u)
{
color[u] = GRAY; // White vertex u has just been discoverd
for (int i = 0; i < N; ++i) { // Explore edge (u, i)
if(graph[u][i]==1){
if (color[i] == WHITE) {
source[i] = u;
DFS_Visit(i);
}else{
if(color[i] == GRAY) incon=true;
}
}
}
color[u] = BLACK; // Blacken u, it is finished
out[--M]=u; //PUT INTO TOPOLIST
}
void DFS()
{
for (int i = 0; i < N; ++i) {
color[i] = WHITE;
source[i] = -1;
out[i]=-1;
}
M = N;
for (int i = 0; i < N; ++i) {
if (color[i] == WHITE) {
DFS_Visit(i);
}
}
}