Please help with DFS.
What is the true way to change k-(needed numbers)
http://pastebin.com/f27Pt0HC - code
#include <iostream>;
#include <map>;
#include <string>;
using namespace std;
// dfs( копия матрицы, кол-во вершин, указатель на юзет, в который будут добавлятся числа Исенбаева, проверяемое ребро, число Исенбаева в данный момент)
int dfs(int **gr, int n, int *&q, int v, int k)
{
for(int i=0;i<n;i++)
if ( (gr[v][i]==-1)&&(q[i]==1000) )//если из v в i есть путь и если i не обойдена
{
q[i]=min(k,q[i]);//чтобы избавится от 1000
dfs(gr,n,q,i,k+1);
}
return 1;
}
int main()
{
int x,i,j,m,n;
map<string,int> a;
n=0;
cin>>m;
int **gr=new int*[3*m]; //матрица смежности
for(int i=0;i<3*m;i++)
gr[i]=new int[3*m];
string s1,s2,s3;
for(int i=0; i<m; i++)//ввод фамилий по 3 в строке
{
cin>>s1>>s2>>s3;
if (a[s1]==0)
a[s1]=++n;
if (a[s2]==0)
a[s2]=++n;
if (a[s3]==0)
a[s3]=++n;
gr[ a[s1] ] [ a[s2] ] =-1;
gr[ a[s2] ] [ a[s1] ] =-1;
gr[ a[s3] ] [ a[s1] ] =-1;
gr[ a[s1] ] [ a[s3] ] =-1;
gr[ a[s3] ] [ a[s2] ] =-1;
gr[ a[s2] ] [ a[s3] ] =-1;
};
int k=1;
x=a["Isenbaev"];
int *used=new int[n];
for(int i=0;i<n;used[i++]=1000);
int *&q=used;
cout<<dfs(gr,n,used,x,1);
i=0;
used[x]=0;
for(map<string,int>::const_iterator x=a.begin();x!=a.end();++x,i++)
if(used[i]<1000)
cout<<x->first<<' '<<used[i]<<endl;
else
cout<<x->first<<" undefined"<<endl;
delete gr,used;
return 0;
}