break语句

本来是用来写广度优先遍历跟深度优先遍历,但是返现了一个比较有意思的地方。
#include<iostream>
#define Maxvexnum 10
using namespace std;
typedef char vertextype;
//邻接表定义
typedef struct ArcNode {
	int adjvex;
	struct ArcNode* nextarc;
}ArcNode;
typedef struct VexNode {
	vertextype data;
	ArcNode* firstarc;
}VexNode,AdjList[Maxvexnum];
typedef struct {
	int vexnum, arcnum;
	AdjList vertice;
}AL_Graph;
//邻接表
int LocateVex_AL(AL_Graph& g, char vex);
void CreateGraph_AL(AL_Graph& g);
void PrintGraph_AL(AL_Graph& g);
void DFS_AL(AL_Graph& g, int vex);
int LocateVex_AL(AL_Graph& g, char vex)
{
	/*
	int i = 0;
	do
	{
		if (g.vertice[i].data == vex)
			return i;
		i++;
	} while (i < g.vexnum);
	*/
	/*****************这样也可以,看来就只是缺少一个break************************/
	for (int i = 0; i < g.vexnum; i++)
		if (g.vertice[i].data == vex)
		{
			return i;
			break;
		}
}
void CreateGraph_AL(AL_Graph& g)
{
	cout << "输入边的总点数,总边数" << endl;
	cin >> g.vexnum >> g.arcnum;
	for (int i = 0; i < g.vexnum; i++)
	{
		cout << "输入第" << i + 1 << "个顶点" << endl;
		cin >> g.vertice[i].data;
		g.vertice[i].firstarc = NULL;
	}
	for (int i = 0; i < g.arcnum; i++)
	{
		char v1, v2;
		cout << "输入第"<<i+1<<"条边" << endl;
		cin >> v1 >> v2;
		int a = LocateVex_AL(g, v1);
		int b = LocateVex_AL(g, v2);
		//cout << a << b;
		ArcNode* p1 = new ArcNode;
		p1->adjvex = b;
		p1->nextarc = g.vertice[a].firstarc;
		g.vertice[a].firstarc = p1;
		ArcNode* p2 = new ArcNode;
		p2->adjvex = a;
		p2->nextarc = g.vertice[b].firstarc;
		g.vertice[b].firstarc = p2;
	}
}
void PrintGraph_AL(AL_Graph& g)
{
	cout << "输出图的顶点\n" << endl;
	for (int i = 0; i < g.vexnum; i++)
		cout << g.vertice[i].data;
	cout << "输出图的边" << endl;
	ArcNode * p = new ArcNode;
	for (int i = 0; i < g.vexnum; i++)
		for (p = g.vertice[i].firstarc; p != NULL; p = p->nextarc)
			cout << g.vertice[i].data << g.vertice[p->adjvex].data << endl;
}
//邻接表图的深度优先遍历,递归调用
void DFS_AL(AL_Graph& g, int vex)
{
	visited[vex] = true;
	ArcNode* p = new ArcNode;
	p = g.vertice[vex - 1].firstarc;
	while (p != NULL)
	{
		int w = p->adjvex;	//读取访问权限冲突,可能是数组越界
		if (!visited[w])
		{
			DFS_AL(g, w);
			cout << LocateVex_AL(g, w) << endl;
		}
		else
			p = p->nextarc;
	}
}
int main()
{
	AL_Graph g;
	CreateGraph_AL(g);
	cout << LocateVex_AL(g, 'd') << endl;
	//PrintGraph_AL(g);
}
代码写的很多,其实就是在这个里面
int LocateVex_AL(AL_Graph& g, char vex)
{
	/*
	int i = 0;
	do
	{
		if (g.vertice[i].data == vex)
			return i;
		i++;
	} while (i < g.vexnum);
	*/
	/*****************这样也可以,看来就只是缺少一个break************************/
	for (int i = 0; i < g.vexnum; i++)
		if (g.vertice[i].data == vex)
		{
			return i;
			//break;
		}
}
加上break这个语句,跟不加完完全全不一样,在vs2019的编译环境下,没有break,即使if语句符合条件,确是仍然循环下去,不返回下标,也就是说if语句其实没有起到任何作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值