677

#include <iostream>
#include <climits>
#include <cstdio>
#include <cstring>
#include <vector>
#include <string>

using namespace std;

int gr[15][15];
bool found = false;
vector<int> vb;
int node,length;

int backtrack(int st,int len,bool visit[])
{
	if(len==length)
	{
		found=1;
		printf("(");
		for(int i=0;i<vb.size();i++)
		{
			printf("%d%s",vb[i]+1,i==vb.size()-1?")\n":",");
		}
		return 0;
	}
	for(int i=0;i<node;i++)
	{
		if(gr[st][i]==1 && visit[i]==0)
		{
			visit[i]=1;
			vb.push_back(i);
			backtrack(i,len+1,visit);
			visit[i]=0;
			vb.pop_back();
		}
	}
	return 1;
}

int main()
{
	int trash;
	int parent[15];
	bool visit[15];
	bool flag=false;
	do
	{
		scanf("%d",&node);
		scanf("%d",&length);
		memset(gr,0,sizeof(gr));
		for(int i=0;i<node;i++)
		{
			for(int j=0;j<node;j++)
			{
				scanf("%d",&gr[i][j]);
			}
		}
		int len=0;
		int st=0;
		vb.clear();
		for(int i=0;i<node;i++)
		{
			visit[i]=false;
			parent[i]=-1;
		}
		visit[st]=1;
		vb.push_back(st);
		if(flag)
		printf("\n");
		flag=1;
		found=0;
		backtrack(st,len,visit);//from 1st node
		if(!found)
		printf("no walk of length %d\n",length);
	}while(scanf("%d",&trash)==1);
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *