dfs
1.邻接矩阵
#include<stdio.h>
#include<string.h>
#define MVNum 10
typedef struct{
char vexs[MVNum];
int arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
int visited[MVNum];
void create(AMGraph &g);
void dfs(AMGraph &g, int v);
int main(){
AMGraph g;
create(g);
memset(visited, 0, sizeof(visited));
dfs(g, 0);
printf("\n");
}
void create(AMGraph &g){
int n,m;
scanf("%d %d",&n,&m);getchar();
g.vexnum=n;g.arcnum=m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
g.arcs[i][j]=0;
for(int i=0;i<n;i++){
g.vexs[i]=getchar();
getchar();
}
int tx,ty;
for(int i=0;i<m;i++){char tc1,tc2;
scanf("%c %c",&tc1,&tc2);getchar();
for(int j=0;j<n;j++){
if(tc1==g.vexs[j])
tx=j;
if(tc2==g.vexs[j])
ty=j;
}
g.arcs[tx][ty]=1;
g.arcs[ty][tx]=1;
}
}
void dfs(AMGraph &g, int v){
printf("%c ",g.vexs[v]);
visited[v]=1;
for(int o=0;o<g.vexnum;o++){
if(g.arcs[v][o]==1&&visited[o]==0)
dfs(g,o);
}
}
2.邻接表
include<stdio.h>
#include<string.h>
#define MVNum 10
typedef struct ArcNode {
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct {
char data;
ArcNode *firstarc;
}VNode;
typedef struct
{ VNode vexs[MVNum];
int vexnum, arcnum;
}ALGraph;
int visited[MVNum];
void create(ALGraph &g);
void dfs(ALGraph &g, int v);
int main(){
ALGraph g;
create(g);
memset(visited, 0, sizeof(visited));
dfs(g, 0);
printf("\n");
}
void create(ALGraph &g){
int n,m;
scanf("%d %d",&n,&m);getchar();
g.vexnum=n;g.arcnum=m;
for(int i=0;i<n;i++){
scanf("%c",&g.vexs[i].data);
getchar();
g.vexs[i].firstarc = NULL;
}
for(int o=0;o<m;o++){
char u,v;
scanf("%c",&u);getchar();
scanf("%c",&v);getchar();
int i,j;
for(int k=0;k<n;k++){
if(u==g.vexs[k].data)
i=k;
if(v==g.vexs[k].data)
j=k;
}
ArcNode *pu,*pv;
pu = new ArcNode;
pu->adjvex=i;
pu->nextarc = g.vexs[j].firstarc;
g.vexs[j].firstarc=pu;
pv = new ArcNode;
pv->nextarc = g.vexs[i].firstarc;
pv->adjvex=j;
g.vexs[i].firstarc=pv;
}
}
void dfs(ALGraph &g, int v){
printf("%c ",g.vexs[v].data);
visited[v]=1;
ArcNode *p = g.vexs[v].firstarc;
while(p){
if(visited[p->adjvex]==0)
dfs(g,p->adjvex);
p=p->nextarc;
}
}
bfs
1.
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define MVNum 10
typedef struct{
char vexs[MVNum];
int arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
int visited[MVNum];
void create(AMGraph &g);
void bfs(AMGraph &g, int v);
int main(){
AMGraph g;
create(g);
memset(visited, 0, sizeof(visited));
bfs(g, 0);
}
void create(AMGraph &g){
int n,m;
scanf("%d %d",&n,&m);getchar();
g.vexnum=n;g.arcnum=m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
g.arcs[i][j]=0;
for(int i=0;i<n;i++){
g.vexs[i]=getchar();
getchar();
}
int tx,ty;
for(int i=0;i<m;i++){char tc1,tc2;
scanf("%c %c",&tc1,&tc2);getchar();
for(int j=0;j<n;j++){
if(tc1==g.vexs[j])
tx=j;
if(tc2==g.vexs[j])
ty=j;
}
g.arcs[tx][ty]=1;
g.arcs[ty][tx]=1;
}
}
void bfs(AMGraph &g, int v){
queue<int> q;
printf("%c ",g.vexs[v]);
visited[v]=1;
q.push(v);
while(!q.empty()){
int u = q.front();
q.pop();
for(int i=0;i<g.vexnum;i++){
if(visited[i]==0&&g.arcs[u][i]==1){
printf("%c ",g.vexs[i]);
visited[i]=1;
q.push(i);
}
}
}
}
2.
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define MVNum 10
typedef struct ArcNode {
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct {
char data;
ArcNode *firstarc;
}VNode;
typedef struct
{ VNode vexs[MVNum];
int vexnum, arcnum;
}ALGraph;
int visited[MVNum];
void create(ALGraph &g);
void bfs(ALGraph &g, int v);
int main(){
ALGraph g;
create(g);
memset(visited, 0, sizeof(visited));
bfs(g, 0);
}
void create(ALGraph &g){
int n,m;
scanf("%d %d",&n,&m);getchar();
g.vexnum=n;g.arcnum=m;
for(int i=0;i<n;i++){
scanf("%c",&g.vexs[i].data);
getchar();
g.vexs[i].firstarc = NULL;
}
for(int o=0;o<m;o++){
char u,v;
scanf("%c",&u);getchar();
scanf("%c",&v);getchar();
int i,j;
for(int k=0;k<n;k++){
if(u==g.vexs[k].data)
i=k;
if(v==g.vexs[k].data)
j=k;
}
ArcNode *pu,*pv;
pu = new ArcNode;
pu->adjvex=i;
pu->nextarc = g.vexs[j].firstarc;
g.vexs[j].firstarc=pu;
pv = new ArcNode;
pv->nextarc = g.vexs[i].firstarc;
pv->adjvex=j;
g.vexs[i].firstarc=pv;
}
}
void bfs(ALGraph &g, int v){
int w;
queue <int> q;
q.push(v);
visited[v]=1;
while(!q.empty()){
w = q.front();
q.pop();
printf("%c ",g.vexs[w].data);
ArcNode *p = g.vexs[w].firstarc;
while(p){
if(visited[p->adjvex]==0){
q.push(p->adjvex);
visited[p->adjvex]=1;
}
p=p->nextarc;
}
}
}