编程题

(最长路径)给定一个有向无环图,每条边长度为1,求图中的最长路径长度。(第五空2分,其余3分)

输入:第一行是结点数n(不超过100)和边数m,接下来m行,每行两个整数a,b,表示从结点a到结点b有一条有向边。结点标号从0到(n-1)。

输出:最长路径长度。

提示:先进行拓扑排序,然后按照拓扑序计算最长路径。


#include

using namespace std;


int n, m, i, j, a, b, head, tail, ans;

int graph[100][100]; // 用邻接矩阵存储图

int degree[100]; // 记录每个结点的入度

int len[100]; // 记录以各结点为终点的最长路径长度

int queue[100]; // 存放拓扑排序结果


int main() {

\tcin >> n >> m;

\tfor (i = 0; i < n; i )

\t\tfor (j = 0; j < n; j )

\t\t\tgraph[i][j] = 0;

\tfor (i = 0; i < n; i )

\t\tdegree[i] = 0;

\tfor (i = 0; i < m; i ) {

\t\tcin >> a >> b;

\t\tgraph[a][b] = 1;

\t (1) ;

\t}

\ttail = 0;

\tfor (i = 0; i < n; i )

\t\tif ( (2) ) {

\t\t\tqueue[tail] = i;

\t\t\ttail ;

\t\t}

\thead = 0;

\twhile (tail < n - 1) {

\t\tfor (i = 0; i < n; i )

\t\t\tif (graph[queue[head] ][i] == 1) {

\t\t (3) ;

\t\t\t\tif (degree[i] == 0) {

\t\t\t\t\tqueue[tail] = i;

\t\t\t\t\ttail ;

\t\t\t\t}

\t\t\t}

\t (4) ;

\t}

\tans = 0;

\tfor (i = 0; i < n; i ) {

\t\ta = queue[i];

\t\tlen[a] = 1;

\t\tfor (j = 0; j < n; j )

\t\t\tif (graph[j][a] == 1 && len[j] 1 > len[a])

\t\t\t\tlen[a] = len[j] 1;

\t\tif ( (5) )

\t\t\tans = len[a];

\t}

\tcout << ans << endl;

\treturn 0;

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论