PTA 地下迷宫探索
源代码如下 c语言
先抛开输入输出格式,因联通与非联通会有不同的输出格式,采用非递归(栈)进行图的遍历是本题主体
#include<stdio.h>
#include<stdlib.h>
#define max 1005//增大
#define overflow -1
#define ERROR -1
typedef struct ArcNode{
int adjvex;
struct ArcNode * nextarc;
}ArcNode;
typedef struct VNode{
int cur;
ArcNode * firstarc;
}VNode,AdjList[max];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
typedef struct{
int * base;
int * top;
}SqStack;
void InitStack(SqStack * S){
(*S).base = (int *)malloc(sizeof(int)*max);
if(!(*S).base) exit(overflow);
(*S).top = (*S).base;
}
void Push(SqStack * S,int e){
*((*S).top++) = e;
}
int Pop(SqStack * S){
int e;
if((*S).base == (*S).top)
return ERROR;
e = *--(*S).top;
return e;
}
int GetTop(SqStack S){
int e;
e = *(--S.top);
return e;
}
int DFSTraverse(int e,SqStack *S,ALGraph G,int visited[]){
int i,j;
ArcNode * w;
Push(S,e);
printf("%d ",e);
visited[e] = 1;
while((*S).base != (*S).top){
i = GetTop(*S);
w = G.vertices[i].firstarc;
while(w!=NULL && visited[w->adjvex]==1) w = w->nextarc;
if(w == NULL){
Pop(S);
j = GetTop(*S);
if((*S).top-(*S).base >1){
printf("%d ",j);
}
if((*S).top-(*S).base == 1)
printf("%d",j);
}
else if(visited[w->adjvex] == 0){
Push(S,w->adjvex);
printf("%d ",w->adjvex);
visited[w->adjvex] = 1;
}
}
return 1;
}
int main(){
ALGraph G;
SqStack S;
InitStack(&S);
int M,N,i,p,q,start,flag=1;
int visited[max]={0};
ArcNode * r,* t,*w;
scanf("%d %d",&N,&M);
scanf("%d",&start);
G.arcnum = M;
G.vexnum = N;
for(i=1;i<=N;i++){
G.vertices[i].cur = i;
G.vertices[i].firstarc = NULL;
}
while(M--){
scanf("%d %d",&p,&q);
r = (ArcNode *)malloc(sizeof(ArcNode));
t = (ArcNode *)malloc(sizeof(ArcNode));
w = (ArcNode *)malloc(sizeof(ArcNode));
r->adjvex = p; r->nextarc = NULL;
t->adjvex = q; t->nextarc = NULL;
if(!G.vertices[q].firstarc){
G.vertices[q].firstarc = r;
}
else{
w = G.vertices[q].firstarc;
if(w->adjvex >= p){
G.vertices[q].firstarc = r;
r->nextarc =w;
}
else{//q的first比p小,p需要在后面找合适位置
if(!w->nextarc){
w->nextarc = r;
}
else{
while(w->nextarc){
if((w->nextarc)->adjvex >= p)
break;
w = w->nextarc;
}//while
r->nextarc = w->nextarc;
w->nextarc =r;
}//else
}//else
}//else
if(!G.vertices[p].firstarc){
G.vertices[p].firstarc = t;
}
else{
w = G.vertices[p].firstarc;
if(w->adjvex >= q){
G.vertices[p].firstarc = t;
t->nextarc =w;
}
else{
if(!w->nextarc){
w->nextarc = t;
}
else{
while(w->nextarc){
if((w->nextarc)->adjvex >= q)
break;
w = w->nextarc;
}//while
t->nextarc = w->nextarc;
w->nextarc =t;
}//else
}//else
}//else
}//while
DFSTraverse(start,&S,G,visited);
for(i=1;i<=G.vexnum;i++){
if(!visited[i]){
printf(" 0\n");
break;
}
}
if(i>G.vexnum)
printf("\n");
return 0;
}
PTA 地下迷宫探索相关推荐
- pta 地下迷宫探索
5-5 地下迷宫探索 (30分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战 ...
- PTA 地下迷宫探索(图的遍历dfs)
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...
- pta地下迷宫探索(详解)
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...
- PTA 6-7-1 地下迷宫探索
6-7-1 地下迷宫探索 (30分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战 ...
- 数据结构PTA 案例6-1.4 地下迷宫探索
案例6-1.4 地下迷宫探索 题目 解法 题目 假设有一个地下通道迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关.请问你如何从某个起点开始在迷宫中点亮所有的灯并回到起 ...
- 7-33 地下迷宫探索 (30 分)(思路加详解)
一:题目 7-33 地下迷宫探索 (30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰 ...
- 7-2 地下迷宫探索 (30 分)(C语言实现)
7-2 地下迷宫探索 (30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争 ...
- 7-9 地下迷宫探索 (8 分)
7-9 地下迷宫探索 (8 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生 ...
- 7-2 地下迷宫探索
7-2 地下迷宫探索 分数 30 全屏浏览题目 切换布局 作者 DS课程组 单位 浙江大学 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村 ...
最新文章
- 关于选择博客网站的一点看法
- arthas命令使用示例:watch
- java8 javafx_Java 8的新增功能(第1部分– JavaFX)
- Linux系统编程8-18总结项目:完成一个简单的自己的shell
- Linux已经霸占了服务器领域
- python爬虫新浪新闻_学习了《python网络爬虫实战》第一个爬虫,爬取新浪新闻
- icmp协议_CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了
- 商品预约抢购实践及redis性能测试
- java的三国游戏 可以招降,招募武将类游戏,三国能选5个武将带兵游戏
- 如何使用浏览器网络监视工具进行黑客攻击
- 测试显卡好坏的软件叫什么关系,#现在测显卡好坏,有无暗病,都用什么软件#显卡压力测试 甜甜圈...
- 浮动时间怎么计算_自由浮动时间 VS 总浮动时间
- Sourcetree下载-使用-快速入门
- 微信小程序input只允许输入数字
- linux 蓝牙驱动
- Struts2远程命令执行漏洞
- js怎么获取扫码枪条码_JS 如何获取扫码枪输入数据
- DM数据库配置开机自启动
- 微淼联合创始人孙延芳:以合规为第一要义,做财商教育“正规军”
- 怎么修改PDF文字,PDF修改文字用什么方法