思路
就是构造一个有向图,去深搜而已!
注意,一个路径可以走多次,就是踩了这个坑,一直有一个例子wa了!
代码
class Solution {
int map[][];
int length;
int threshold;//阈值
int ans;
public int numWays(int n, int[][] relation, int k)
{
ans=0;
length=n;
map=new int[length][length];
threshold=k;
int row=relation.length;
// 数值为1,表示连通,且是单向连接
for (int i=0;i<row;++i)
{
map[relation[i][0]][relation[i][1]]=1;
}
for (int j=0;j<length;++j)
{
if (map[0][j]==1) //连通地图,第0行与其他行有1,表示是一个可以出发的点
{
dfs(0,j,0);
}
}
return ans;
}
//搜索以当前结点为
private void dfs(int x,int y,int step)
{
if (step==threshold-1 && y==length-1)
{
++ans;
}
if(step>threshold)
return;
for (int i=0;i<length;++i)
{
if (map[y][i]==1)
{
dfs(y,i,step+1);
}
}
}
}
结果
就是没有细节处理好循环利用路径来达到步数这个点,然后就直接wa了两次。最后修改了一下代码,一个路径可以重复走多次,然后就AC了!