链接:https://www.nowcoder.com/acm/contest/185/B
来源:牛客网
题目描述
给出一个 n * n 的邻接矩阵A.
A是一个01矩阵 .
A[i][j]=1表示i号点和j号点之间有长度为1的边直接相连.
求出从 1 号点 到 n 号点长度为k的路径的数目.
输入描述:
第1行两个数n,k (20 ≤n ≤ 30,1 ≤ k ≤ 10)
第2行至第n+1行,为一个邻接矩阵
输出描述:
题目中所求的数目
示例1
输入
复制
4 2
0 1 1 0
1 0 0 1
1 0 0 1
0 1 1 0
输出
复制
2
说明
样例如图:
第一条路径:1-2-4
第二条路径:1-3-4
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
string line = Console.ReadLine();
string[] tLine = line.Split(' ');
int num = int.Parse(tLine[0].ToString());
int k = int.Parse(tLine[1].ToString());
int[,] arrary = new int[num,num];
int count = 0;
while ((line = Console.ReadLine())!=null)
{
string[] temp = line.Split(' ');
for (int i = 0; i < num; i++)
arrary[count, i] = int.Parse(temp[i]);
count++;
if (count == num) break;
}
List<int> path = new List<int>();
path.Add(1);
Console.WriteLine(FindPath(1, k, arrary, num, path));
}
static int FindPath(int start,int end,int[,] data,int num,List<int> path)
{
int result = 0;
for (int i = 0; i < num; i++)
{
if (data[start,i] == 1)
{
if (i == end) result++;
else if (!path.Contains(i))
{
path.Add(i);
result += FindPath(i, end, data, num, path);
path.Remove(i);
}
}
}
return result;
}
}
}