STL 实现邻接表的存储与深搜广搜的完美结合不容错过啊!!!
2013-08-22 16:15
176 查看
#include<stdio.h>
#include<vector>
#include<iostream>
#include<string.h>
#include<queue>
#define MAX 100000
using namespace std;
vector<int>map[MAX];/////////////////////////////邻接表定义
int vis[MAX];
char point[MAX];
void dfs(int i){
//从第i个节点开始对图进行深度优先遍历
int j;
printf("%c",point[i]);
vis[i]=1;
for(j=0;j<map[i].size();j++)
if(!vis[map[i][j]])
{
//vis[map[i][j]]=1;
dfs(map[i][j]);
}
}
void bfs(int i){
//从第i个节点开始对图进行广度优先遍历
int t,j;
queue<int>q;
q.push(i);
vis[i]=1;
printf("%c",point[i]);
while(!q.empty())
{
t=q.front();
q.pop();
for(j=0;j<map[t].size();j++)
if(!vis[map[t][j]])
{
printf("%c",point[map[t][j]]);
vis[map[t][j]]=1;
q.push(map[t][j]);
}
}//while
}
int main()
{
memset(vis,0,sizeof(vis));
int n,m,a,b,i;
scanf("%d %d",&n,&m);//输入点数和边数
scanf("%s",point);
for(i=0;i<MAX;i++)
map[i].clear();//清空行链表
for(i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
map[a].push_back(b);
map[b].push_back(a);
}
for(i=0;i<strlen(point);i++)
if(!vis[i])
{
dfs(i);//深度优先遍历
puts("");
}
memset(vis,0,sizeof(vis));
for(i=0;i<strlen(point);i++)
if(!vis[i])
{
bfs(i);//深度优先遍历
puts("");
}
system("pause");
return 0;
}
#include<vector>
#include<iostream>
#include<string.h>
#include<queue>
#define MAX 100000
using namespace std;
vector<int>map[MAX];/////////////////////////////邻接表定义
int vis[MAX];
char point[MAX];
void dfs(int i){
//从第i个节点开始对图进行深度优先遍历
int j;
printf("%c",point[i]);
vis[i]=1;
for(j=0;j<map[i].size();j++)
if(!vis[map[i][j]])
{
//vis[map[i][j]]=1;
dfs(map[i][j]);
}
}
void bfs(int i){
//从第i个节点开始对图进行广度优先遍历
int t,j;
queue<int>q;
q.push(i);
vis[i]=1;
printf("%c",point[i]);
while(!q.empty())
{
t=q.front();
q.pop();
for(j=0;j<map[t].size();j++)
if(!vis[map[t][j]])
{
printf("%c",point[map[t][j]]);
vis[map[t][j]]=1;
q.push(map[t][j]);
}
}//while
}
int main()
{
memset(vis,0,sizeof(vis));
int n,m,a,b,i;
scanf("%d %d",&n,&m);//输入点数和边数
scanf("%s",point);
for(i=0;i<MAX;i++)
map[i].clear();//清空行链表
for(i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
map[a].push_back(b);
map[b].push_back(a);
}
for(i=0;i<strlen(point);i++)
if(!vis[i])
{
dfs(i);//深度优先遍历
puts("");
}
memset(vis,0,sizeof(vis));
for(i=0;i<strlen(point);i++)
if(!vis[i])
{
bfs(i);//深度优先遍历
puts("");
}
system("pause");
return 0;
}
相关文章推荐
- 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现
- 利用AjaxPro框加结合存储过程实现的无刷新分页
- DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储
- 用邻接表存储有向图并实现DFS(递归+非递归)BFS(非递归)两种遍历
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 图的邻接表存储 c实现
- 一款功能强大并且可以结合html5实现本地存储的数据库 – SQLite学习文档
- 打造超完美主页?20个主页设计技能你不容错过
- 图的邻接表存储 c实现
- 【酷】JS+CSS实现滑动门与导航条的完美结合
- 无向图的广度优先搜索(采用邻接表存储)C++实现
- 图的邻接表存储c实现
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 云方案,依托H3C彩虹云存储架构,结合UIA统一认证系统,实现了用户数据的集中存储和管理
- 图的邻接表存储 c实现
- <C/C++图>图的邻接表存储(C++模板实现)
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 用邻接表的存储结构实现迪杰斯特拉算法
- 数据结构之---C语言实现图的邻接表存储表示
- 数据结构_图_邻接表做存储结构实现求无向图的连通分量_C++实现