来自二维数组的动态邻接表

问题描述

鉴于 0 和 1 的 40x20 二维数组,我需要创建一个动态分配的图形邻接列表。该图是矩形的,只有当两个顶点直接相邻时才会创建边,这意味着一个顶点最多只能有 4 个相邻顶点。这是我玩弄的一些代码,但我真的不明白如何为函数提供一个看起来像这样的形式参数

Vertex** Wierzch; //Wierzch == vertex in my language

到目前为止,这是我的代码,我能够编写一个程序来创建由用户输入确定的图形,但是在下一步中,我将尝试创建一个连接为 1 的顶点的图形

#include <iostream>
#include <iomanip>

using namespace std;


struct Vertex
{
  int var;
  Vertex * next;
};

int main( )
{
  int n,m,i,v1,v2;
  Vertex ** Wierzch;
  Vertex *p,*r;

  cin >> n >> m;    

  Wierzch = new Vertex* [n]; 

  for( i = 0; i < n; i++ ) 
  Wierzch[i] = NULL;

  for( i = 0; i < m; i++ )
  {
    cin >> v1 >> v2;  
    p = new Vertex;  
    (*p).var = v2; 
    (*p).next = Wierzch[v1]; 
    Wierzch[v1] = p;
  }

  cout << endl;


  for( i = 0; i < n; i++ )
  {
    cout << "Wierzch [" << i << "] =";
    p = Wierzch[i];
    while(p)
    {
      cout << setw ( 3 ) << p->var;
      p = p->next;
    }
    cout << endl;
  }

  for( i = 0; i < n; i++ )
  {
    p = Wierzch[i];
    while( p )
    {
      r = p;
      p = p->next;
      delete r;
    }
  }

  delete [] Wierzch;

  cout << endl;

  return 0;
}

这是我希望它在最终形式中的样子,因为它只是一个更大项目的一部分,我不能让它只在 int(main) 中工作,但正如我所说,我不知道Vertex** Wierzch 真正代表什么。

#include <iostream>
#include <iomanip>

using namespace std;

struct Vertex{
    int var = 0;
    bool colour; // false = black,true = white  
    Vertex* next;
};

void CreateList(Vertex **& Wierzch);
void DeleteList(Vertex **& Wierzch);
void PrintList(Vertex **& Wierzch);

void CreateList(Vertex **& Wierzch,int& m,int& n)
{

    Vertex* p;
    int v1,v2;
    
    cin >> m >> n; // Number of vertexes and edges respectively
    
    Wierzch = new Vertex* [m];

    for(int i = 0;i<m;i++)
    Wierzch[i] = NULL;
    
    for(int i = 0;i<n;i++)
    {
        cin >> v1 >> v2;
        p = new Vertex;
        p->var = v2;
        p->next = Wierzch[v1];
        Wierzch[v1] = p;    
    }   
        
}

void PrintList(Vertex **& Wierzch,int& m)
{
    Vertex* p;
    for(int i = 0;i<m;i++)
    {
        cout << "Wierzch [" << i << "]=";
        p = Wierzch[i];
    }
    while(p)
    {
        cout << setw(3) << p->var;
        p= p->next;
    }
}

void DeleteList(Vertex **& Wierzch,int& m)
{
    Vertex* r,*p;
    for(int i =0;i<m;i++)
    {
        p = Wierzch[i];
        while(p)
        {
            r = p;
            p = p->next;
            delete r;
        }
        
    delete [] Wierzch;  
    }
}

int main()
{
    int m =0,n = 0;
        Vertex** Wierzch;
    CreateList(Wierzch,n);
    PrintList(Wierzch,m);
    DeleteList(Wierzch,m);
    return 0;
}

任何帮助将不胜感激,尤其是 Vertex** Wierzch 的真正含义以及如何将其作为形式参数提供给任何可以处理它的函数

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)