郁闷了一段之后,真高兴,把图的创建理解了。keke~
2010-04-15 11:25
351 查看
/*
//图
#include<iostream>
#include<malloc.h>
#define Vnum 20
using namespace std;
typedef struct arcnode
{
int adjvex; //结点的编号
struct arcnode *nextarc;//指向下一结点的指针
}arcnode;
typedef struct vexnode
{
int vertex; //结点数组
arcnode *firstarc; //指向第一条边的指针
}adjlist[Vnum];
typedef struct graphs
{
adjlist a_list; //结点数组
int vexnum,arcnum;//分别表示顶点和边的数量
}graph;
void create(graph *g)
{
int n,e,i,j,k;
arcnode *p;
cout<< "创建一个图:/t";
cout<<"顶点数:/t";
cin>>n;
cout<<"/t/t边 数";
cin>>e;
g->vexnum=n;
g->arcnum=e; //edage
for(i=0;i<n;i++)
{
g->a_list[i].vertex=i;
g->a_list[i].firstarc=NULL;
}
for(k=0;k<e;k++)
{
cin>>i>>j; //i,j分别表示结点数组编号和结点的编号
p=(arcnode*)malloc(sizeof(arcnode));
p->adjvex=j;
p->nextarc=g->a_list[i].firstarc;
g->a_list[i].firstarc=p;
}
}
void dis(graph *g)
{
int i;
arcnode *p;
int have=0;
for(i=0;i<g->vexnum;i++)
{
p=g->a_list[i].firstarc;
have=0;
while(p!=NULL)
{
cout<<"("<<i<<","<<p->adjvex<<")";
p=p->nextarc;
have=1;
}
if(have) cout<<endl;
}
}
void dfs(graph g,int v,int visit[])
{
arcnode *p;
cout<<v<<" ";
visit[v]=1;
p=g.a_list[v].firstarc;
while(p!=NULL)
{
if(visit[p->adjvex]==0)
dfs(g,p->adjvex,visit);
p=p->nextarc;
}
}
int main()
{
graph g;
int next[20];
create(&g);
dis(&g);
cout<<endl;
dfs(g,0,next);
return 0;
}
*/
#include<iostream>
#include<malloc.h>
#define Vnum 20
using namespace std;
typedef struct arcnode
{
int adjvex;
arcnode *nextarc;
}arcnode;
typedef struct //vexnode
{
int vertex;
arcnode *firstarc;
}adjlist[Vnum];
typedef struct graphs
{
adjlist a_list;
int arcnum,vexnum;
}graph;
void create(graph *g)
{
int n,e,i,k,j;
arcnode *p;
cout<<"请输入顶点数和边数:"<<endl;
cin>>n>>e;
g->vexnum=n;
g->arcnum=e;
for(i=0;i<g->arcnum;i++)
{
g->a_list[i].vertex=i;
g->a_list[i].firstarc=NULL;
}
for(k=0;k<g->arcnum;k++)
{
cin>>i>>j;
p=(arcnode *)malloc(sizeof(arcnode));
p->adjvex=j;
cout<<j<<" ";//
p->nextarc=g->a_list[i].firstarc;
g->a_list[i].firstarc=p;
}
}
/*
void dfs(graph g,int v,int visit[])
{
cout<<v<<" ";
}*/
void dis(graph *g)
{
arcnode *p;
int have=0;
// int k=0;
// i=0;
// j=g->arcnum;
// while(k<g->arcnum)
for(int i=0;i<g->arcnum;i++)
{
p=g->a_list[i].firstarc;
have=0;
while(p!=NULL)
{
cout<<"("<<i<<","<<p->adjvex<<")";
have=1;
p=p->nextarc;
}
if(have) cout<<endl;
// k++;
}
}
int main()
{
graph g;
create(&g);
dis(&g);
return 0;
}
//图
#include<iostream>
#include<malloc.h>
#define Vnum 20
using namespace std;
typedef struct arcnode
{
int adjvex; //结点的编号
struct arcnode *nextarc;//指向下一结点的指针
}arcnode;
typedef struct vexnode
{
int vertex; //结点数组
arcnode *firstarc; //指向第一条边的指针
}adjlist[Vnum];
typedef struct graphs
{
adjlist a_list; //结点数组
int vexnum,arcnum;//分别表示顶点和边的数量
}graph;
void create(graph *g)
{
int n,e,i,j,k;
arcnode *p;
cout<< "创建一个图:/t";
cout<<"顶点数:/t";
cin>>n;
cout<<"/t/t边 数";
cin>>e;
g->vexnum=n;
g->arcnum=e; //edage
for(i=0;i<n;i++)
{
g->a_list[i].vertex=i;
g->a_list[i].firstarc=NULL;
}
for(k=0;k<e;k++)
{
cin>>i>>j; //i,j分别表示结点数组编号和结点的编号
p=(arcnode*)malloc(sizeof(arcnode));
p->adjvex=j;
p->nextarc=g->a_list[i].firstarc;
g->a_list[i].firstarc=p;
}
}
void dis(graph *g)
{
int i;
arcnode *p;
int have=0;
for(i=0;i<g->vexnum;i++)
{
p=g->a_list[i].firstarc;
have=0;
while(p!=NULL)
{
cout<<"("<<i<<","<<p->adjvex<<")";
p=p->nextarc;
have=1;
}
if(have) cout<<endl;
}
}
void dfs(graph g,int v,int visit[])
{
arcnode *p;
cout<<v<<" ";
visit[v]=1;
p=g.a_list[v].firstarc;
while(p!=NULL)
{
if(visit[p->adjvex]==0)
dfs(g,p->adjvex,visit);
p=p->nextarc;
}
}
int main()
{
graph g;
int next[20];
create(&g);
dis(&g);
cout<<endl;
dfs(g,0,next);
return 0;
}
*/
#include<iostream>
#include<malloc.h>
#define Vnum 20
using namespace std;
typedef struct arcnode
{
int adjvex;
arcnode *nextarc;
}arcnode;
typedef struct //vexnode
{
int vertex;
arcnode *firstarc;
}adjlist[Vnum];
typedef struct graphs
{
adjlist a_list;
int arcnum,vexnum;
}graph;
void create(graph *g)
{
int n,e,i,k,j;
arcnode *p;
cout<<"请输入顶点数和边数:"<<endl;
cin>>n>>e;
g->vexnum=n;
g->arcnum=e;
for(i=0;i<g->arcnum;i++)
{
g->a_list[i].vertex=i;
g->a_list[i].firstarc=NULL;
}
for(k=0;k<g->arcnum;k++)
{
cin>>i>>j;
p=(arcnode *)malloc(sizeof(arcnode));
p->adjvex=j;
cout<<j<<" ";//
p->nextarc=g->a_list[i].firstarc;
g->a_list[i].firstarc=p;
}
}
/*
void dfs(graph g,int v,int visit[])
{
cout<<v<<" ";
}*/
void dis(graph *g)
{
arcnode *p;
int have=0;
// int k=0;
// i=0;
// j=g->arcnum;
// while(k<g->arcnum)
for(int i=0;i<g->arcnum;i++)
{
p=g->a_list[i].firstarc;
have=0;
while(p!=NULL)
{
cout<<"("<<i<<","<<p->adjvex<<")";
have=1;
p=p->nextarc;
}
if(have) cout<<endl;
// k++;
}
}
int main()
{
graph g;
create(&g);
dis(&g);
return 0;
}
相关文章推荐
- 深入理解JavaScript系列(47):对象创建模式(上篇)
- 组合分区表创建索引之后最好收集索引的统计信息
- maven web创建之后报错的一种情况及解决方案
- 深度理解java虚拟机读书笔记(二)HotSpot Java对象创建,内存布局以及访问方式
- 让我郁闷半天的一段javaScript代码
- MySQL事务(event scheduler)的学习【事务创建之后,没有运行的问题】
- 深入理解利用new创建对象的执行过程以Person p=new Person("张三",20);为例
- 深入理解JavaScript的创建对象(构造函数、原型对象、实例)
- 假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd
- 深入理解JavaScript系列(48):对象创建模式(下篇)
- java5之后创建线程池的几个API 以及区别
- 通过一段汇编,加深对寄存器ESP和EBP的理解
- java面试-深入理解JVM(二)——揭开HotSpot对象创建的奥秘
- 通过一段汇编,加深对寄存器ESP和EBP的理解
- 纯C++创建Windows窗体(理解WinMain()与WndProc())
- linux升级内核之后Virtualbox启动出错无法创建任务
- [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
- 创建Business Data Connectivity Service之后遇报错“There are no addresses available for this application”
- 从汇编层面去理解对象创建
- JAVA主线程创建的字线程,在主线程停止之后,还会运行吗?