转的算法~~图的广度搜索!按照字典…
来源:互联网 发布:mac系统官方下载地址 编辑:程序博客网 时间:2024/05/19 17:57
Sample Input
5HUEAK0 0 2 3 00 0 0 7 42 0 0 0 03 7 0 0 10 4 0 1 0H
Sample Output
HAEKU
下面是源代 !!!
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int n;
#define NUM 100
char str[NUM];
struct Node{
int index; //改点在邻接表中的下标
Node *next;
};
struct open{
char s;
bool visited;
Node *first;
}openA[NUM];
struct Temp{
char s;
int id;
};
bool cmp(Temp a,Temp b){
return a.s<b.s;
}
int main(){
char s;
while(cin>>n){
cin>>str;
int i,j,e,k=0;
for(i=0;i<n;i++){//初始化邻接表
openA[i].s=str[i];
openA[i].visited=false;
openA[i].first=NULL;
}
Node *p;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cin>>e;
if(e){ //构造邻接表
p=new Node;
p->index=j;
p->next=openA[i].first;
openA[i].first=p;
}
}
}
cin>>s;
for(i=0;i<n;i++){
if(str[i]==s)
break;
}
queue<int> Q;
Q.push(i);
openA[i].visited=true;
cout<<str[i];
Temp t[NUM];
int c,bj=i;
while(!Q.empty()){
c=0;
j=Q.front();
//A[j].visited=true;
if(bj!=j)
cout<<str[j];
Node *q;
q=openA[j].first;
//cout<<q->index<<endl;
while(q){ //找到与该点相连的所有未访问过的结点,保存到数组t中
if(!openA[q->index].visited){
openA[q->index].visited=true;
t[c].id=q->index;
t[c].s=openA[q->index].s;
c++;
}
q=q->next;
}
sort(t,t+c,cmp); //按字典顺序搜索
for(i=0;i<c;i++)
Q.push(t[i].id);
Q.pop(); //访问过的节点出队
}
}
return 0;
}
0 0
- 转的算法~~图的广度搜索!按照字典…
- 图的广度优先搜索算法实现
- 图的广度优先搜索----算法导论
- 图的搜索算法之广度优先搜索
- 图的基础算法-广度优先搜索/深度优先搜索
- [算法] 基本图算法的c++实现:广度优先搜索
- 关于图的广度优先搜索算法的思考.
- 算法导论-图的搜索算法之深度优先搜索和广度优先搜索
- 图的基本算法(二、广度优先搜索)
- 【自己动手写数据结构】 -- 图的广度优先搜索算法
- 图的深度(DFS)/广度优先搜索算法(BFS)/Dijkstra
- 【算法导论】图的广度优先搜索遍历(BFS)
- 数据结构与算法9: 图的广度优先搜索
- 图的深度优先和广度优先搜索算法
- 十二、图的遍历--(3)广度优先搜索算法
- 图的广度优先搜索算法并生成BFS树
- 经典算法之图的广度优先搜索遍历
- 一个精炼的广度优先搜索算法
- 成绩等级新解法,关于映射方法
- 用递归方法求解猴子吃桃问题
- 求解三个数的最大的数,求最小的同…
- 转~素数求法
- 求水仙花数
- 转的算法~~图的广度搜索!按照字典…
- 递归方法求解汉诺塔!
- 单链表的删除操作的实现
- 单链表的插入操作的实现---后插法…
- 单链表的查找操作
- goto语句是一种无条件转移语句
- 单链表的删除
- 单链表的定位操作
- 递归的原理的验证程序!!