1437 图论面试题

来源:互联网 发布:乐敦养润水副作用知乎 编辑:程序博客网 时间:2024/06/03 12:57
描述

给出一个无环的有向图,现在请你求出从这个图的某点出发,到其余顶点不同路径的条数。

自身到自身算1条,但A->B->BA->B是同一条。

输入

输入第一行为一个整数T,表示以下有T组测试数据。

每组数据的第一行给出一个整数N,表示有N个顶点,以下NN列以矩阵形式给出该有向图。

输出

每次一行,包括N个数,输出从顶点1(顶点编号1到N)到其它点的路径数

样例输入
1
5
1 1 1 1 0
0 1 0 0 1
0 0 1 0 1
0 0 0 1 1
0 0 0 0 1
样例输出

1 1 1 1 3



DAG图,深度优先遍历

#include <iostream>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;const int maxn=1010;vector<int>adj[maxn];int   num[maxn];int  T,  n;int   flag;void init( ){   for (int i=1; i<=n; i++) {       adj[i].clear();     for (int j=1; j<=n; j++)     {           scanf("%d", &flag);     if (flag && (i!=j) ) adj[i].push_back(j);     }   }   memset(num, 0, sizeof(num));}void dfs(int u){   num[u]++;   for (int i=0; i<adj[u].size(); i++)   {        int  v=adj[u][i];       dfs(v);    }   return;}int main( ){    cin>>T; while (cin>>n)  {       init( );     dfs(1);      for (int i=1; i<=n; i++)     {          printf("%d", num[i]);        if (i<n) printf(" ");     }      puts("");    }   return 0;}