Renderer.path()
//我在我的程序中使用了这段代码,下面给出了函数调用
但是当我编译它时会显示运行时错误。请告诉我这是什么问题 用这个代码。
class Graph
{
long long int V;
list<long long int> *adj;
bool isCyclicUtil(long long int v, bool visited[],long long int parent);
public:
Graph(long long int V);
void addEdge(long long int v,long long int w);
bool isCyclic();
};
Graph::Graph(long long int V)
{
this->V = V;
adj = new list<long long int>[V];
}
void Graph::addEdge(long long int v,long long int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
bool Graph::isCyclicUtil(long long int v, bool visited[],long long int parent)
{
visited[v] = true;
list<long long int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); i++)
{
if (!visited[*i])
{
if (isCyclicUtil(*i, visited, v))
return true;
}
else if (*i != parent)
return true;
}
return false;
}
bool Graph::isCyclic()
{
bool *visited = new bool[V];
for (long long int i = 0; i < V; i++)
visited[i] = false;
for (long long int u = 0; u < V; u++)
if (!visited[u])
if (isCyclicUtil(u, visited, -1))
return true;
return false;
}
//它是函数调用。我正在使用此代码来了解邻接矩阵中是否存在循环。 例如 设A是图G =(V,E)的邻接矩阵。如果节点i和j与边连接,则A(i,j)= 1,否则A(i,j)= 0。
我的目标是了解G是否是循环的。循环的定义如下:
i和j连接:A(i,j)= 1
j和k连接:A(j,k)= 1
k和i连接:A(k,i)= 1
输入
1 2 1(i,j,a [i] [j]的值)
2 3 1(j,k)
1 3 1(i,k)
所以它是循环的。
int main()
{
long long int t,n,q;
cin>>t;
while(t--)
{
cin>>n>>q;
long long int val[q],i[q],j[q],flag=0;
long long int count=0,count1=0;
int hash_s[n] = {0};
for(long long int t=0;t<q;t++)
{
cin>>i[t]>>j[t]>>val[t];
i[t]=i[t]-1;
j[t]=j[t]-1;
hash_s[i[t]]++;
hash_s[j[t]]++;
if(val[t]==1)
{
count++;
}
if(i[t]==j[t] && val[t]==1)
{
flag=1;
}
}
for(long long int t=0;t<q;t++)
{
for(long long int l=0;l<q;l++)
{
if(i[t]==j[l] && j[t]==i[l] && val[t]!=val[l])
{
flag=1;
break;
}
}
if(flag==1)
break;
}
for(int i=0;i<n;i++)
{
if(hash_s[i]>0)
{
count1++;
}
}
Graph g(count1);
for(long long int t=0;t<q;t++)
{
if(val[t]==1)
{
g.addEdge(i[t],j[t]);
}
}
if(g.isCyclic() && count%2!=0 && count>2 )
{
flag=1;
}
if(flag==0)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
}