dfs遍历以每一个点为起点是否存在长度为k的环。dfs(now,last,step)中的now表示当前点,last表示上一个访问的点,step一个记录路径长度的计数器,s【i】记录从起点到i点的路径长度。如果某点被访问第二次,则说明出现环,判断当前路径长度和它第一次出现是的长度差是否等于K即可。
int k;
bool e[N][N];//(1,1)开始,双向建边
int s[N];
bool dfs(int now,int last,int step) (dfs(1,1,1))
{
if(s[now]) return step-s[now]==k;
s[now]=step;