搜索的学习和调试,包括深度搜索和…
2014-09-01 19:20
197 查看
Description
编写无向图的邻接矩阵类AdjMWGraph,实现无向图的广度遍历和深度遍历。其中,图中顶点数据类型为字符。
Input
第一行图中顶点的个数n(4<=n<=26)
第二行是图中边的条数m(3<=m<=351)
第三行是顶点信息(全为大写字母)
后面的输入数据是依附于一条边的两个顶点,有多少条边,就输入多少组信息。
注意:根结点都为A;并且所给字符连续,也就是说A
B C D ……。
Output
广度优先搜索序列。 深度优先搜索序列。
#include<iostream>
#include<string.h>
#include<algorithm>
#include<deque>
using namespace std;
#define MAXNODE 100
//最大顶点数目
void dfs(int G[][MAXNODE],int i,int
n);
void bfs(int G[][MAXNODE],int i,int
n);
int a[MAXNODE][MAXNODE];
struct ns
{
int
no;//顶点关系类型,对无权图用1或0表示是否相邻;对带权图为权值类型
char ch;//弧相关信息
}NODE[MAXNODE];
bool visi1[MAXNODE]={false};
bool visi2[MAXNODE]={false};
int main()
{
int n,m,i,j,x1,x2,flag;
char ch1,ch2;
cin>>m>>n;
for(i=0;i<m;i++)
{
cin>>NODE[i].ch;
NODE[i].no=i;//赋值为
}
for(i=0;i<m;i++)
for(j=0;j<m;j++)
a[i][j]=0;
for(i=0;i<n;i++)
{
flag=0;
x1=-1;
x2=-1;
cin>>ch1>>ch2;
for(j=0;j<m;j++)
{
if(ch1==NODE[j].ch)
x1=NODE[j].no;
else
if(NODE[j].ch==ch2)
x2=NODE[j].no;
if(x1!=-1&&x2!=-1)
{
flag=1;
break;
}
}
if(flag==1)
a[x1][x2]=1;
}
bfs(a,0,m);
cout<<endl;
dfs(a,0,m);
cout<<endl;
while(1);
return 0;
}
//采用递归来进行深度搜索
void dfs(int G[][MAXNODE],int i,int n)
{
int j;
cout<<NODE[i].ch<<"
";
visi1[i]=true;
for(j=0;j<n;j++)
{
if(!visi1[j]&&G[i][j]!=0)
dfs(G,j,n);
}
}
//利用队列广度搜索
void bfs(int G[][MAXNODE],int i,int n)
{
int j,k;
deque<int> q;
cout<<NODE[i].ch<<"
";
visi2[i]=true;
q.push_back(i);
while(!q.empty())
{
k=q.front();
q.pop_front();
for(j=0;j<n;j++)
{
if(!visi2[j]&&G[k][j]!=0)
{
cout<<NODE[j].ch<<"
";
visi2[j]=true;
q.push_back(j);
}
}
}
}
转发至微博
转发至微博
编写无向图的邻接矩阵类AdjMWGraph,实现无向图的广度遍历和深度遍历。其中,图中顶点数据类型为字符。
Input
第一行图中顶点的个数n(4<=n<=26)
第二行是图中边的条数m(3<=m<=351)
第三行是顶点信息(全为大写字母)
后面的输入数据是依附于一条边的两个顶点,有多少条边,就输入多少组信息。
注意:根结点都为A;并且所给字符连续,也就是说A
B C D ……。
Output
广度优先搜索序列。 深度优先搜索序列。
Sample Input
7 6 A B C D E F G A B A C B D B E C F C G
Sample Output
A B C D E F G A B D E C F G
#include<iostream>
#include<string.h>
#include<algorithm>
#include<deque>
using namespace std;
#define MAXNODE 100
//最大顶点数目
void dfs(int G[][MAXNODE],int i,int
n);
void bfs(int G[][MAXNODE],int i,int
n);
int a[MAXNODE][MAXNODE];
struct ns
{
int
no;//顶点关系类型,对无权图用1或0表示是否相邻;对带权图为权值类型
char ch;//弧相关信息
}NODE[MAXNODE];
bool visi1[MAXNODE]={false};
bool visi2[MAXNODE]={false};
int main()
{
int n,m,i,j,x1,x2,flag;
char ch1,ch2;
cin>>m>>n;
for(i=0;i<m;i++)
{
cin>>NODE[i].ch;
NODE[i].no=i;//赋值为
}
for(i=0;i<m;i++)
for(j=0;j<m;j++)
a[i][j]=0;
for(i=0;i<n;i++)
{
flag=0;
x1=-1;
x2=-1;
cin>>ch1>>ch2;
for(j=0;j<m;j++)
{
if(ch1==NODE[j].ch)
x1=NODE[j].no;
else
if(NODE[j].ch==ch2)
x2=NODE[j].no;
if(x1!=-1&&x2!=-1)
{
flag=1;
break;
}
}
if(flag==1)
a[x1][x2]=1;
}
bfs(a,0,m);
cout<<endl;
dfs(a,0,m);
cout<<endl;
while(1);
return 0;
}
//采用递归来进行深度搜索
void dfs(int G[][MAXNODE],int i,int n)
{
int j;
cout<<NODE[i].ch<<"
";
visi1[i]=true;
for(j=0;j<n;j++)
{
if(!visi1[j]&&G[i][j]!=0)
dfs(G,j,n);
}
}
//利用队列广度搜索
void bfs(int G[][MAXNODE],int i,int n)
{
int j,k;
deque<int> q;
cout<<NODE[i].ch<<"
";
visi2[i]=true;
q.push_back(i);
while(!q.empty())
{
k=q.front();
q.pop_front();
for(j=0;j<n;j++)
{
if(!visi2[j]&&G[k][j]!=0)
{
cout<<NODE[j].ch<<"
";
visi2[j]=true;
q.push_back(j);
}
}
}
}
转发至微博
转发至微博
相关文章推荐
- android 深度搜索学习笔记一 (单词统计)
- android深度搜索学习笔记三( 蜂鸣器驱动)
- NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing...
- NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing...
- NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing...
- 数据结构学习_图(1)深度优先搜索、广度优先搜索和最小生成树
- 深度学习的GDB调试命令和经验记录
- 深度学习-如何调试基于spark的LSTM
- Keras/Python深度学习中的网格搜索超参数调优(附源码)
- NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing...
- android深度搜索学习笔记四(硬件抽像hal第一部分)
- 深度学习在搜狗无线搜索广告中的应用
- 蒙特卡罗树搜索+深度学习 -- AlphaGo原版论文阅读笔记
- 【双11背后的技术】基于深度强化学习与自适应在线学习的搜索和推荐算法研究
- 蒙特卡罗树搜索+深度学习 -- AlphaGo原版论文阅读笔记
- android深度搜索学习笔记二(控制发光二级管)
- 深度优先搜索的学习
- 深度学习在搜狗无线搜索广告中的应用
- ×××××#######Keras/Python深度学习中的网格搜索超参数调优(附源码)(译文)+++++++
- GMIS 2017 Martin Müller演讲:深度学习时代的启发式搜索