运行时使用dfs代码时出错

时间:2017-09-04 15:48:09

标签: c++

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;
            }

        }
}  

0 个答案:

没有答案