当前位置:文档之家› 图的基本操作与实现

图的基本操作与实现

图的基本操作与实现
图的基本操作与实现

摘要:

图(Graph)是一种非线性结构,它的每一个顶点可以与多个其它顶点相关联,各顶点之间的关系是任意的。这种结构的灵活性很强,可以用来描述和求解更多的实际问题,因此得到广泛的应用。最典型的应用领域有电路分析、寻找最短路线、项目规划、鉴别化合物、统计力学、遗传学、控制论、语言学,以及一些社会科学中。反过来,也正是由于其限制很少,已不再属于线性结构,因此运用这类结构时需要有更多的技巧。本课题是在VC++环境下,运用图的性质完成各种基本操作的实现。

关键词:邻接矩阵;邻接表;深度(广度)优先遍历;连通分量;递归

目录

1需求分析 (1)

1.1课程设计题目 (1)

1.2课程设计任务及要求 (1)

1.3课程设计思想 (1)

2概要设计 (2)

2.1程序的整体功能结构 (2)

2.2数据结构的设计 (3)

3详细设计和实现 (5)

3.1算法流程图 (5)

3.2 各个要求的实现方法 (5)

3.3主程序设计 (7)

4调试与操作说明 (20)

4.1程序调试与体会 (20)

4.2程序运行结果 (21)

总结 (23)

致谢 (24)

参考文献 (25)

1需求分析

1.1课程设计题目

(1)自选存储结构,输入含n个顶点(用字符表示顶点)和e条边的图G;

(2)求每个顶点的度,输出结果;

(3)指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点序列(提

示:使用一个栈实现DFS);

(4)指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列(提

示:使用一个队列实现BFS);

(5)输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连

的边,并作DFS遍历(执行操作3);否则输出信息“无x”;

(6)判断图G是否是连通图,输出信息“YES”/“NO”;

(7)如果选用的存储结构是邻接矩阵,则用邻接矩阵的信息生成图G的邻

接表,即复制图G,然再执行操作(2);反之亦然。

1.2课程设计任务及要求

1.搜集图方面的资料;

2.负责设计数据结构,画好流程图,编写代码;

3.撰写课程设计报告;

4.参加答辩。

1.3课程设计思想

1.3.1 图的邻接表表示

在第i行的单链表中,各结点分别存放与同一个顶点vi关联的各条边。

各结点配有标识dest,指示该边的另一个顶点;还配有指针link,指向同一链表中的下一条边的边结点。对于带权图,结点中还要保存该边的权值cost。

通过在顶点表的第i个顶点信息中保存的指针adj,可以找到与顶点i对应的边链表的第一个边结点;此外,该记录还保存有该顶点的其他信息。

1.3.2 图的深度优先搜索

深度优先搜索是个不断探查和回溯的过程。在探查的每一步,算法都有一个当前顶点。最初的当前顶点,也就是指定的起始顶点。每一步探查过程中,首先对当前顶点v进行访问,并立即设置该顶点的访问标志visited[v]=true。接着在v的所有邻接顶点中,找出尚未访问过的一个,将其作为下一步探查的当前顶点。倘若当前顶点的所有邻接顶点都已经被访问过,则退回一步,将前一步所访问的顶点重新取出,当作探查的当前顶点。

重复上述过程,直到最初指定起始顶点的所有邻接顶点都被访问到,此时连通图中的所有顶点也必然都被访问过了。

1.3.3 图的广度优先搜索

广度优先搜索时一个逐层遍历的过程,在此过程中,图中有多少顶点就要重复多少步。每一步都有一个当前顶点。最初的当前顶点是主过程指定的起始顶点。在每一步中,首先访问当前顶点v,并设置该顶点的访问标志visited[v]=true。接着依次访问v的各个未曾被访问过的邻接顶点w1,w2,…,wt,然后再顺序访问w1,w2,…,wt的所有还未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,如此做下去,直到图中所有顶点都被访问为止。

2概要设计

2.1程序的整体功能结构

输入1个图先求出每个顶点的度,输出结果;然后指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点序列;接着指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列;其次输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连的边,并作DFS遍历(执行操作

3);否则输出信息“无x”;下一步是判断图G是否是连通图,输出信息

“YES”/“NO”;最后如果选用的存储结构是邻接矩阵,则用邻接矩阵的信息生成图G的邻接表,即复制图G,然再执行操作(2);反之亦然。

2.2数据结构的设计

2.2.1边节点类的定义

struct Edge //边结点的定义

{

int dest; //边的另一顶点位置

E cost; //边上的权值

Edge *link; //下一条边链指针

};

2.2.2顶点类的定义

template //顶点的定义

struct Vertex

{

T data; //顶点的名字

Edge *adj; //边链表的头指针

};

2.2.3图类的定义

template

class Graph //图的类定义

{

protected:

int maxVertices;//图中最大的顶点数

int numEdges; //当前边数

int numVertices; //当前顶点数

T *output; //存放遍历的数组

T *input; //存放输入数组

Vertex *NodeTable;//顶点表(各边链表的头结点)

int getVertexPos (const T vertx)// 取顶点v在数组中的位置

{

int j=-1;

for(int i=0;i

{

if(NodeTable[i].data==vertx)

j=i;

}

return j;

}

void DFS(Graph& G, int v, bool visited[]) //图的深度优先搜索

{

cout<

visited[v] = true; //作访问标记

int w = G.getFirstNeighbor (v); //第一个邻接顶点

while (w != -1)//若邻接顶点w存在

{

if ( !visited[w] )

DFS(G, w, visited); //若w未访问过, 递归访问顶点w

w = G.getNextNeighbor (v, w); //下一个邻接顶点

}

}

public:

Graph (); //构造函数

~Graph(); //析构函数

T getValue (int i) //取顶点i 的值

{

return (i>=0 && i

}

bool insertVertex(const T &vertex); //插入顶点vertex

bool insertEdge (int v1, int v2, E cost); //插入边(v1, v2),权值为cost

bool removeVertex(int v); //删除指定的顶点

bool removeEdge(int v1,int v2); //删除一条边

int getFirstNeighbor (int v);//取顶点v 的第一个邻接顶点

int getNextNeighbor (int v, int w); //取v 的邻接顶点w 的下一邻接顶点

int getFirstCost (int v);//取顶点v 的第一个邻接顶点的cost值

int getNextCost (int v, int w); //取v 的邻接顶点w 的下一邻接顶点的cost值

void DFS(Graph& G,const T& v);//从顶点v出发对图G进行深度优先遍历的主过程

int BFS(Graph& G, const T& v); //图的广度优先搜索

void WheCan(Graph& G);//判断是否为连通图

void OutPut();//输出

void HaveEdge(Graph& G);//求顶点的度

void SerachVertex(Graph& G);//输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连的边,并作DFS遍历

void ChangeGraph(Graph& G); //将用邻接表表示的数转换为邻接矩阵表示

void Input();//输入

};

3详细设计和实现

3.1算法流程图

程序主要设计了六个功能:首先是求每个顶点的度,然后可以选择对图G

作DFS (或BFS )搜索,接着可以判断此图是否连通,接着可以将图G 转换为

临街矩阵存储方式退出,最后可以对图G 作查找顶点。

主函数流程如下:

图3.1.1主函数流程图 3.2 各个要求的实现方法

3.2.1自选存储结构,输入含n 个顶点(用字符表示顶点)和e 条边

的图G

采用邻接表的存储结构

Y

N个顶点的输入存储到顶点节点链表(Vertex )中

如果第n个节点和第m个节点之间含有一条边e,就将n和m的顶点链表中指向的边链表中存储入n和m在顶点表中的下标和权值

3.2.2求每个顶点的度,输出结果

顶点的度指与该顶点相关联的边的条数

在用邻接链表做为图的存储方式中,要求一个顶点n的度只要去搜索存放顶点n的边节点链表,其中存放了多少条边的信息,这个顶点的度就为多少。

3.2.3指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点

序列

DFS遍历指的是深度优先搜索

深度优先搜索的基本思想:

DFS 在访问图中某一起始顶点v 后, 由v 出发, 访问它的任一邻接顶点w1; 再从w1 出发, 访问与w1邻接但还没有访问过的顶点w2; 然后再从w2 出发, 进行类似的访问, …如此进行下去, 直至到达所有的邻接顶点都被访问过的顶点u 为止。接着, 退回一步, 退到前一次刚访问过的顶点, 看是否还有其它没有被访问的邻接顶点。如果有, 则访问此顶点, 之后再从此顶点出发, 进行与前述类似的访问; 如果没有, 就再退回一步进行搜索。重复上述过程, 直到连通图中所有顶点都被访问过为止。

3.2.4指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点

序列

BFS指的是广度优先搜索

BFS基本思想:

BFS在访问了起始顶点v 之后, 由v 出发, 依次访问v 的各个未被访问过的邻接顶点w1, w2, …, wt, 然后再顺序访问w1, w2, …, wt 的所有还未被访问过的邻接顶点。

再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,…如此做下去,直到图中所有顶点都被访问到为止。

广度优先搜索是一种分层的搜索过程, 每向前走一步可能访问一批顶点, 不像深度优先搜索那样有往回退的情况。因此, 广度优先搜索不是一个递归的过程。

3.2.5输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相

关连的边,并作DFS遍历(执行操作3);否则输出信息“无x”;

输入顶点,在顶点表中所搜是否含有这个顶点,如果没有,就输出“无x”。如果含有,搜索存放顶点n的边节点链表,找出其中存放的顶点m,然后将这个顶点m链表中的存放n的那个节点删除,同时将n中存放m的节点删除。然后在顶点链表中存放顶点n 的节点删除。

3.2.6判断图G是否是连通图,输出信息“YES”/“NO”;

对图做BFS遍历,如果遍历到的顶点数等于当前的顶点数的个数,这个图就是联通图,反之就不是连通图

3.2.7如果选用的存储结构是邻接矩阵,则用邻接矩阵的信息生成图G

的邻接表,即复制图G,然再执行操作(2);反之亦然

我采用的是邻接矩阵做为图的存储结构。将用邻接表存储的图转化为邻接矩阵的存储的基本思想是:

(1)将图的顶点表中存放的顶点的信息都存放在一个顶点矩阵中

(2)逐个搜索各个顶点的边节点链表,如果含有节点,将邻接矩阵中对应二维数组的值赋值为cost的值。

顶点的度为:统计第i 行(列) 不为0 的个数可得顶点i 的度。

3.3主程序设计

///////////////////////////////////////////////////Graph.h

#include

#include

#include"Queue.h"

using namespace std;

template

struct Edge //边结点的定义

{

int dest; //边的另一顶点位置

E cost; //边上的权值

Edge *link; //下一条边链指针

Edge(){} //构造函数

Edge(int num,E cost):dest(num),weight(cost),link(NULL){} //构造函数bool operator!=(Edge& R) const //判边等否

{

return dest != R.dest;

}

};

template //顶点的定义

struct Vertex

{

T data; //顶点的名字

Edge *adj; //边链表的头指针

};

template

class Graph //图的类定义

{

protected:

int maxVertices;//图中最大的顶点数

int numEdges; //当前边数

int numVertices; //当前顶点数

T *output; //存放遍历的数组

T *input; //存放输入数组

Vertex *NodeTable;//顶点表(各边链表的头结点)

int getVertexPos (const T vertx)// 取顶点v在数组中的位置

{

int j=-1;

for(int i=0;i

{

if(NodeTable[i].data==vertx)

j=i;

}

return j;

}

void DFS(Graph& G, int v, bool visited[]) //图的深度优先搜索{

cout<

visited[v] = true; //作访问标记

int w = G.getFirstNeighbor (v); //第一个邻接顶点

while (w != -1)//若邻接顶点w存在

{

if ( !visited[w] )

DFS(G, w, visited); //若w未访问过, 递归访问顶点w

w = G.getNextNeighbor (v, w); //下一个邻接顶点

}

}

public:

Graph (); //构造函数

~Graph(); //析构函数

T getValue (int i) //取顶点i 的值

{

return (i>=0 && i

}

bool insertVertex(const T &vertex); //插入顶点vertex

bool insertEdge (int v1, int v2, E cost); //插入边(v1, v2),权值为cost

bool removeVertex(int v); //删除指定的顶点

bool removeEdge(int v1,int v2); //删除一条边

int getFirstNeighbor (int v);//取顶点v 的第一个邻接顶点

int getNextNeighbor (int v, int w); //取v 的邻接顶点w 的下一邻接顶点

int getFirstCost (int v);//取顶点v 的第一个邻接顶点的cost值

int getNextCost (int v, int w); //取v 的邻接顶点w 的下一邻接顶点的cost 值

void DFS(Graph& G,const T& v);//从顶点v出发对图G进行深度优先遍历的主过程

int BFS(Graph& G, const T& v); //图的广度优先搜索

void WheCan(Graph& G);//判断是否为连通图

void OutPut();//输出

void HaveEdge(Graph& G);//求顶点的度

void SerachVertex(Graph& G);//输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连的边,并作DFS遍历

void ChangeGraph(Graph& G); //将用邻接表表示的数转换为邻接矩阵表示

void Input();//输入

};

#include

template

Graph::Graph() //构造函数:建立一个空的邻接表

{

maxVertices=100;

numVertices=0;

numEdges=0;

NodeTable = new Vertex[maxVertices]; //创建顶点表数组

if (NodeTable == NULL)

{

cerr<<"存储分配错!"<

exit(1);

}

for (int i=0;i

{

NodeTable[i].adj = NULL;

}

output=new T[maxVertices];

}

template

Graph::~Graph()//析构函数:删除一个邻接表

{

for (int i=0;i

{

Edge *p = NodeTable[i].adj;

while (p != NULL)

{

NodeTable[i].adj = p->link;

delete p;

p = NodeTable[i].adj;

}

}

delete[]NodeTable; //删除顶点表数组

}

template

bool Graph::insertVertex(const T &vertex) //插入顶点

{

if(numVertices==maxVertices)

return false;

NodeTable[numVertices].data=vertex;

numVertices++;

return true;

}

template

bool Graph::insertEdge (int v1, int v2, E cost)//插入边(v1, v2),权值为cost {

if(v1>=0&&v1<=numVertices&&v2>=0&&v2<=numVertices)

{

Edge*q, *p=NodeTable[v1].adj; //v1对应的边链表头z指针

while(p!=NULL&&p->dest!=v2) //寻找邻接顶点v2

p=p->link;

if(p!=NULL) //找到此边不插入

return false;

p=new Edge; //否则创建新节点

q=new Edge;

p->dest=v2;

p->cost=cost;

p->link=NodeTable[v1].adj;//链入v1的边链表

NodeTable[v1].adj=p;

q->dest=v1;

q->cost=cost;

q->link=NodeTable[v2].adj;//链入v2的边链表

NodeTable[v2].adj=q;

numEdges++;

return true;

}

else

{

cerr<<"参数有误!请重新输入!"<

exit(1);

return false;

}

}

template

bool Graph::removeVertex(int v)

{

if(numVertices==1||v<0||v>=numVertices)

{

cerr<<"参数有误,请重新输入!"<

exit(1);

return false; //表空或顶点超出范围}

Edge *p,*s,*t;

int k;

while(NodeTable[v].adj!=NULL)

{

p=NodeTable[v].adj;

k=p->dest;

s=NodeTable[k].adj;

t=NULL;

while(s!=NULL&&s->dest!=v)

{

t=s;

s=s->link;

}

if(s!=NULL)

{

if(t==NULL)

NodeTable[k].adj=s->link;

else

t->link=s->link;

delete s;

}

NodeTable[v].adj=p->link;

delete p;

numEdges--;

}

numVertices--;

NodeTable[v].data=NodeTable[numVertices].data;

p=NodeTable[v].adj=NodeTable[numVertices].adj;

while(p!=NULL)

{

s=NodeTable[p->dest].adj;

while(s!=NULL)

if(s->dest==numVertices)

{

s->dest=v;

break;

}

else

s=s->link;

}

return true;

}

template

bool Graph::removeEdge(int v1,int v2)

{

if(v1!=-1&&v2!=-1)

{

Edge *p=NodeTable[v1].adj,*q=NULL,*s=p;

while(p!=NULL&&p->dest!=v2)

{

q=p;

p=p->link;

}

if(p!=NULL)

{

if(p==s)

NodeTable[v1].adj=p->link;

else

q->link=p->link;

delete p;

}

else

return false;

p=NodeTable[v2].adj;

q=NULL;

s=p;

while(p->dest!=v1)

{

q=p;

p=p->link;

}

if(p==s)

NodeTable[v2].adj=p->link;

else

q->link=p->link;

delete p;

return true;

}

return false;

}

template

int Graph::getFirstNeighbor (int v)//给出顶点位置为v 的第一个邻接顶点的位置,如果找不到, 则函数返回-1

{

if (v!=-1)

{ //顶点v存在

Edge *p=NodeTable[v].adj; //对应边链表第一个边结点

if (p!=NULL) //存在, 返回第一个邻接顶点

return p->dest;

}

return -1; //第一个邻接顶点不存在

}

template

int Graph::getNextNeighbor (int v, int w) //给出顶点v的邻接顶点w的下一个邻接顶点的位置,若没有下一个邻接顶点, 则函数返回-1

{

if(v!=-1)

{ //顶点v存在

Edge *p = NodeTable[v].adj;

while (p!=NULL && p->dest!=w)

p = p->link;

if (p!=NULL && p->link!=NULL) //返回下一个邻接顶点

return p->link->dest;

}

return -1; //下一邻接顶点不存在

}

template

int Graph::getFirstCost (int v)//给出顶点位置为v 的第一个邻接顶点的位置,如果找不到, 则函数返回-1

{

if (v!=-1)

{ //顶点v存在

Edge *p=NodeTable[v].adj; //对应边链表第一个边结点的cost值

if (p!=NULL) //存在, 返回第一个邻接顶点

return p->cost;

}

return -1; //第一个邻接顶点不存在

}

template

int Graph::getNextCost(int v, int w) //给出顶点v的邻接顶点w的下一个邻接顶点的位置,若没有下一个邻接顶点, 则函数返回-1

{

if(v !=-1)

{ //顶点v存在

Edge *p = NodeTable[v].adj;

while (p!=NULL && p->dest!=w)

p = p->link;

if (p!=NULL && p->link!=NULL) //返回下一个邻接顶点的cost值return p->link->cost;

}

return -1; //下一邻接顶点不存在//下一邻接顶点不存在}

template

void Graph::DFS(Graph& G,const T& v)

{

int i, loc, n = numVertices; //顶点个数

bool *visited = new bool[n]; //创建辅助数组

for (i = 0; i < n; i++) //辅助数组visited初始化

visited [i] = false;

loc=v;

DFS(G, loc, visited); //从顶点0开始深度优先搜索

delete [] visited;

}

template

int Graph::BFS (Graph& G, const T& v)

{

int i, w, n=numVertices,m=0; //图中顶点个数

bool *visited = new bool[n];

for (i=0;i

visited[i]=false;

int loc=v; //取顶点号

output[m]=G.getValue(loc); //访问顶点v

visited[loc]=true; //做已访问标记

Queue Q(20);

Q.EnQueue (loc); //顶点进队列

while (!Q.IsEmpty()) //循环, 访问所有结点

{

Q.DeQueue (loc);

w=G.getFirstNeighbor(loc); //第一个邻接顶点

while(w!=-1) //若邻接顶点w存在

{

if (!visited[w]) //若未访问过

{

output[++m]=G.getValue(w); //访问

visited[w]=true;

Q.EnQueue(w); //顶点w进队列

}

w=G.getNextNeighbor(loc,w); //找顶点loc 的下一个邻接顶点

}

} //外层循环,判队列空否

delete [] visited;

return m;

}

template

void Graph::WheCan(Graph& G) //判断是否为连通图

{

int x=0;

x=BFS(G,0);

if(x==numVertices)

cout<<"YES!!!"<

else

cout<<"NO!!!"<

}

template

void Graph::OutPut()

{

for(int i=0;i

cout<

cout<

}

template //得到每个顶点的度

void Graph::HaveEdge(Graph& G)

{

for(int i=0;i

{

int n=0;

int m=getFirstNeighbor(i);

if(m!=-1)

n++;

int a=getNextNeighbor(i,m);

if(a!=-1)

{

do

{

n++;

a=getNextNeighbor(i,a);

}

while(a=!-1);

}

cout<<"顶点"<

}

}

template

void Graph:: SerachVertex(Graph& G)//输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连的边,并作DFS遍历

{

T ver;

T *n=new T[numVertices];

int i,m=0;

int a;

cout<<"请输入要查询的定点的数值!!"<

cin>>ver;

i=getVertexPos(ver);

if(i==-1)

cout<<"你要查找的顶点不存在"<

else

{

n[m]=getFirstNeighbor(i);

a=n[m];

m++;

if(getNextNeighbor(i,n[m])!=-1)

{

n[m]=getNextNeighbor(i,a);

a=n[m];

m++;

}

for(int j=0;j

removeEdge(i,n[j]);

cout<<"删除"<

DFS(G,0);

}

}

template

void Graph::ChangeGraph(Graph& G)

{

int i,j,m;

T *VerticesList=new T[numVertices]; //顶点表

for(i=0;i

VerticesList[i]=getValue(i);

E **Edge=(E**)new E*[numVertices]; //邻接矩阵

for(i=0;i

Edge[i]=new E[numVertices];

for(i=0;i

for(j=0;j

Edge[i][j]=0;

for(i=0;i

{

int m=getFirstNeighbor(i);

if(m!=-1)

Edge[i][m]=Edge[m][i]=getFirstCost(i);

int a=getNextNeighbor(i,m);

if(a!=-1)

{

Edge[i][a]=Edge[a][i]=getNextCost(i,m);

a=getNextNeighbor(i,a);

}

}

cout<<"邻接矩阵为:"<

for(i=0;i

{

for(int j=0;j

cout<

cout<

}

for(i=0;i

{

m=0;

for(j=0;j

{

if(Edge[i][j]!=0)

m++;

}

cout<<"顶点"<

}

}

template

void Graph::Input()

{

int i,j;

int numv,nume;

input=new T[100];

int a,b,c;

cout<<"请输入顶点总数和边的总数!!"<

cin>>numv>>nume;

for(i=0;i

{

cout<<"请输入第"<

cin>>input[i];

}

for (i=0;i

insertVertex(input[i]);

for(j=0;j

{

cout<<"请输入要插入边的两个顶点和权值!"<

cin>>a>>b>>c;

insertEdge(a,b,c);

}

delete[] input;

}

///////////////////////////////////////////////////Queue.h

template

class Queue //队列抽象类

{

protected:

int rear, front; //队尾与队头指针

T *elements; //队列存放数组

int maxSize; //队列最大容量

public:

Queue(){}

Queue(int sz); //构造函数

~Queue(){} //析构函数

bool EnQueue(T x); //进队列

bool DeQueue(T& x); //出队列

bool getFront(T& x); //取队头

bool IsEmpty()const //判队列空

{

return (front==rear)?true:false;

}

bool IsFull()const //判队列满

{

return ((rear+1)%maxSize==front)?true:false;

}

};

template

Queue::Queue(int sz):front(0), rear(0),maxSize(sz)//构造函数{

elements = new T[maxSize];

}

word制作流程图

步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。

步骤二:制作流程图的标题 基本工作环境设置好之后就开始制作流程图的标题。大家看到的最终效果中的标题是放在一个矩形自选图形中的,下面开始制作。 1.在窗口Word窗口底部的自选图形工具栏中选择“矩形”按钮(图 4)。 2.这时可以在页面中看到“在此创建图形”的画布,接着拖动鼠标,在该画布中绘制矩形,让矩形的宽度与画布相同,高度可参照最终效果图,约3厘米。

3.画好后调整画布的高度,使之与矩形的高度相同(图 5)。 4.接下来选中插入的矩形,单击鼠标右键,在弹出的菜单中选择“设置自选图形格式”命令,打开“设置自选图形格式”对话框,在“颜色与线条”选项卡中,先设置线条颜色为“无线条颜色”,接着单击“填充”区“颜色”下拉箭头,选择“其它颜色”命令,打开“颜色”对话框,参照下图设置填充颜色(图6),完成后依次单击两次“确定”。 5.接下来在矩形框中插入艺术字标题。选中矩形框,单击鼠标右键,在弹出的菜单中选择“添加文字”命令,这时可以看到光标在矩形框内闪动,表示等待添加文字。

常用流程图软件有哪些

流程图是一种常见的图表,日常工作中也常常需求用到,比方写案牍策划、会议流程图等等。在亿图软件中只需求简略几步,就能够快速画出美丽、实用的流程图。 要想画好工作流程图,除了要了解基本的流程图符号含义外,一款高效的辅助软件也是必不可少的。如今移动办公已经成为了潮流,特别是像互联网这样一个追求速度、效率的行业,更是需要将时间价值最大化。传统的流程图制作软件都需要从符号开始画起,而且操作繁琐,对于非专业人士来讲,实在是苦不堪言。所以小编今天就给大家介绍一款专为高效人士打造的办公绘图软件――亿图流程图软件 亿图图示画工作流程图有哪些优势? 1.智能绘图,拖曳式的操作简单易上手,适用于各类人群。 2.支持跨平台办公,可以同时在Windows、Mac以及Linux上同时使用。 3.拥有丰富的模板和符号库,无论是思维导图、流程图、组织结构图、还是工艺图、地图,用亿图都可轻松绘制。

4.支持导出多种格式的文件,与Visio正常衔接,而且导出后还可以在Visio上继续编辑。 在选择好绘图工具以后,接下来我们就要开始准备画流程图了。 1、打开亿图图示软件,选择新建―流程图―创建空白文档进入画布,也可以选择自己喜欢的流程图模板点击进入。 2、进入之后我们可以左侧面板选择想要的图形素材,用鼠标点击或拖动它到图表区域中。

3、选择完之后双击图形可以在里面输入文本内容。输入完成后可以在右侧面板中自由更改图形线条颜色、粗细等样式。 4、重复以上步骤很快就可以将流程图画出来了,之后我们可以将画好的系统流程图进行保存或者导出发送。点击菜单栏上的文件按钮返回到软件新建界面,然后选择导出,选择需要导出的格式点击确定即可保存。

邻接表表示的图的基本操作的实现

邻接表表示的图的基本操作的实现 //采用邻接表完成无权无向及有向图的"建立、输出、深度遍历、广度遍历"操作 #include #include #define OK 1 #define ERROR -1 typedef int Status; typedef int ElemType; //此例中设元素为单值元素,类型为整型 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef int ElemType; //图顶点数据类型 typedef int QueueElemType;//队列结点数据类型 //链表结点类型定义 typedef struct Qnode { QueueElemType data; struct Qnode *next; }QNode; //队列类型定义: typedef struct Linkqueue { QNode *front,*rear; }LinkQueue; //图的数据类型定义 typedef struct Tablenode//表结点结构 { int adjVex;//邻接点域,存放与vi相邻接的顶点vj的序号j struct Tablenode *next;//指针域,将邻接表的所有表结点链在一起 float weight;//对于带权图,表示权值,对于无权图则可省略此数据域 }TableNode;

typedef struct Headnode//头结点结构 { ElemType vertex;//顶点域vertex,存放顶点vi的信息 struct Tablenode *firstEdge;//vi的邻接表的头指针 }HeadNode; typedef struct Mgraph { struct Headnode vector[MAX_VERTEX_NUM]; //顶点向量 int vexnum; //图中当前顶点数 } MGraph; //队列初始化 Status InitLinkQueue(LinkQueue *Q) { QNode *p; p=(QNode*)malloc(sizeof(QNode));//开辟头结点空间 if(p!=NULL) { p->next=NULL; Q->front=Q->rear=p; return OK; } else return ERROR; } //链式队列的入队操作,在已知队列的队尾插入一个元素e,修改队尾指针rear。 Status InsertLinkQueue(LinkQueue *Q,ElemType e) { QNode *p;

简单制作亿图流程图的基本操作

简单制作亿图流程图的基本操作 导语: 亿图图示是一款功能强大的综合性绘图软件,使用它可以很轻松的制作出各种流程图。本文讲解了一些用亿图绘制流程图的基本操作,下面就一起来看看吧。 免费获取亿图图示软件:https://www.doczj.com/doc/9c1994525.html,/edrawmax/ 适合在电脑上用的流程图软件有哪些? 适合在电脑上画流程图的软件可以说非常多了,一些比较有名的都是国外的,但国内也有优秀的流程图软件,比如说亿图图示。这是一款国产的、可以画专业流程图的软件,操作十分符合国人的习惯。除了各种流程图以外,亿图图示同时也支持绘制思维导图、工业设计、组织结构图等,集200种以上的绘图工具于一身。软件提供矢量基础的20000个以上的符号、1000个以上的模板和例子以便用户绘图使用。同时,亿图图示也支持多种类型文件的导入导出,导入如Visio、SVG,导出如Visio、SVG、HTML、PS、JPG、PNG、PDF、Office文件等等。

亿图图示软件特色: 1、丰富的背景样式:几十套背景样式供用户使用,且只需拖拽样式到画布即可替换背景。 2、无限量的图框:可以在画布中添加无限量的图框,大大满足用户的创作需求。 3、页面适应到绘画:画布可无限量之大,一键点击“页面适应到绘图”,软件即可自动剪切画布至绘图区域。 4、免费更新提醒:当软件有新的版本或模板更新时,软件可提醒用户进行更新操作。 5、软件咨询服务:在绘图过程中遇到操作难题,可在线与客服人员联系,并解决问题。 如何使用用亿图图示软件在电脑上画流程图? 打开软件后,会自动进入【新建】预定义模板和例子的界面,在这里,选择【流程图】,此时右侧的界面,会跳转至流程图模板和例子的界面,你可以根据需求,选择对应的流程图类型进行快速绘图。

软件流程图

程序流程图 程序流程图独立于任何一种程序设计语言,比较直观、清晰,易于学习掌握。但流程图也存在一些严重的缺点。例如流程图所使用的符号不够规范,常常使用一些习惯性用法。特别是表示程序控制流程的箭头可以不受任何约束,随意转移控制。这些现象显然是与软件工程化的要求相背离的。为了消除这些缺点,应对流程图所使用的符号做出严格的定义,不允许人们随心所欲地画出各种不规范的流程图。例如,为使用流程图描述结构化程序,必须限制流程图只能使用图3.25所给出的五种基本控制结构。 图4.3 流程图的基本控制结构 任何复杂的程序流程图都应由这五种基本控制结构组合或嵌套而成。作为上述五种控制结构相互组合和嵌套的实例,图示给出一个程序的流程图。图中增加了一些虚线构成的框,目的是便于理解控制结构的嵌套关系。显然,这个流程图所描述的程序是结构化的。

图4.4流程图的基本控制结构 N-S图 Nassi和Shneiderman 提出了一种符合结构化程序设计原则的图形描述工具,叫做盒图,也叫做N-S图。为表示五种基本控制结构,在N-S图中规定了五种图形构件。参看图4.5。 为说明N-S图的使用,仍用图4.4给出的实例,将它用如图4.6所示的N-S图表示。 如前所述,任何一个N-S图,都是前面介绍的五种基本控制结构相互组合与嵌套的结果。当问题很复杂时,N-S图可能很大。 图4.5 N-S图的五种基本控制结构

图4.6 N-S图的实例 PAD PAD是Problem Analysis Diagram的缩写,它是日本日立公司提出,由程序流程图演化来的,用结构化程序设计思想表现程序逻辑结构的图形工具。现在已为ISO认可。 PAD也设置了五种基本控制结构的图式,并允许递归使用。 图4.7 PAD的基本控制结构 做为PAD应用的实例,图4.8给出了图4.4程序的PAD表示。PAD所描述程序的层次关系表现在纵线上。每条纵线表示了一个层次。把PAD图从左到右展开。随着程序层次的增加,PAD逐渐向右展开。 PAD的执行顺序从最左主干线的上端的结点开始,自上而下依次执行。每遇到判断或循环,就自左而右进入下一层,从表示下一层的纵线上端开始执行,直到该纵线下端,再返回上一层的纵线的转入处。如此继续,直到执行到主干线的下端为止。

数据结构 图的基本操作实现

实验五图的遍历及其应用实现 一、实验目的 1.熟悉图常用的存储结构。 2.掌握在图的邻接矩阵和邻接表两种结构上实现图的两种遍历方法实现。 3.会用图的遍历解决简单的实际问题。 二、实验内容 [题目一] :从键盘上输入图的顶点和边的信息,建立图的邻接表存储结构,然后以深度优先搜索和广度优先搜索遍历该图,并输出起对应的遍历序列. 试设计程序实现上述图的类型定义和基本操作,完成上述功能。该程序包括图类型以及每一种操作的具体的函数定义和主函数。 提示: 输入示例 上图的顶点和边的信息输入数据为: 5 7 DG A B C D E AB AE BC CD DA DB EC [题目二]:在图G中求一条从顶点 i 到顶点 s 的简单路径 [题目三]:寻求最佳旅游线路(ACM训练题) 在一个旅游交通网中,判断图中从某个城市A到B是否存在旅游费用在s1-s2元的旅游线路,为节省费用,不重游故地。若存在这样的旅游线路则并指出该旅游线路及其费用。 输入: 第一行:n //n-旅游城市个数 第2行:A B s1 s2 //s1,s2-金额数 第3行---第e+2行 ( 1≤e≤n(n-1)/2 ) 表示城市x,y之间的旅行费用,输入0 0 0 表示结束。

输出: 第一行表示 A到B的旅游线路景点序列 第二行表示沿此线路,从A到B的旅游费用 设计要求: 1、上机前,认真学习教材,熟练掌握图的构造和遍历算法,图的存储结 构也可使用邻接矩阵等其他结构. 2、上机前,认真独立地写出本次程序清单,流程图。图的构造和遍历算法 分别参阅讲义和参考教材事例 图的存储结构定义参考教材 相关函数声明: 1、/* 输入图的顶点和边的信息,建立图*/ void CreateGraph(MGraph &G) 2、/* 深度优先搜索遍历图*/ void DFSTraverse(Graph G, int v) 3、/*广度优先搜索遍历图 */ void BFSTraverse(Graph G, int v)4、 4、/* 其他相关函数 */…… 三、实验步骤 ㈠、数据结构与核心算法的设计描述 ㈡、函数调用及主函数设计 (可用函数的调用关系图说明) ㈢程序调试及运行结果分析 ㈣实验总结 四、主要算法流程图及程序清单 1、主要算法流程图: 2、程序清单 (程序过长,可附主要部分)

苹果电脑常用的中文版流程图软件

苹果电脑常用的中文版流程图软件 导语: 苹果电脑好用,是公认的,但是该电脑所支持的软件却比Windows系统电脑少一大截。究竟有什么好用的Mac版中文流程图软件呢?继续阅读,看下正文的介绍! 免费获取亿图图示软件:https://www.doczj.com/doc/9c1994525.html,/edrawmax/ 苹果电脑常用的中文版流程图软件 Edraw Max(亿图图示),这是一款适合国人操作习惯的中文版全类型图形图表设计软件,能够轻松绘制出专业的流程图。操作界面类似office,普通人也能很快上手操作。可绘制包含流程图、思维导图、组织结构图等200多种类型的图形图表,还有上万个原创矢量图标和素材,供用户免费使用。

亿图图示软件特色: 1、来自全球超过600万的用户选择下载安装。 2、支持多系统操作:亿图图示工作流程图图可以在Windows,Mac 和 Linux上进行制作。 3、产品升级:亿图软件不断更新升级,重视用户体验度。 4、简单操作:一键式绘制工具帮助用户绘制快捷,方便使用者管理工作项目。 如何下载使用中文版软件亿图图示 1、首先我们需要在电脑上下载安装好亿图图示软件,打开浏览器,搜索“亿图图示”,找到带有官网标识的网站,然后点击进入。

2、接着进入之后找到亿图图示的下载页面,找到对应自己电脑系统版本的下载链接进行下载,这里有三个选项,分别对应的是Windows、Mac、Linux系统,因为我们使用的Mac电脑,所以选择Mac系统的亿图图示进行下载。 3、下载安装好之后,打开亿图图示软件,点击“新建”---“流程图”,这个时候可以看到右侧有很多的流程图模板可以使用,我们可以使用这些模板来快速创建,也可以点击右侧的“创建”来新建一个空白模板。

Photoshop基本操作介绍(图文介绍)

第一课:工具的使用 一、Photoshop 简介: Adobe 公司出品的Photoshop 是目前最广泛的图像处理软件,常用于广告、艺术、平面设计等创作。也广泛用于网页设计和三维效果图的后期处理,对于业余图像爱好者,也可将自己的照片扫描到计算机,做出精美的效果。总之,Photoshop 是一个功能强大、用途广泛的软件,总能做出惊心动魄的作品。 二、认识工具栏 1、 选框工具:用于选取需要的区域 ----选择一个像素的横向区域 ----选择一个像素的竖向区域

属性栏: 注:按shift 键+ 框选,可画出正方形或正圆形区域 2、 移动工具 : -----用于移动图层或选区里的图像 3、套索工具: ----用于套索出选区 ----用于套索出多边形选区 ----可根据颜色的区别而自动产生套索选区 4、魔术棒工具: ----根据颜色相似原理,选择颜色相近的区域。 注:“容差”,定义可抹除的颜色范围,高容差会抹除范围更广的像素。 5、修复工具: 且是 ----类似于“仿制图工具”,但有智能修复功能。 ----用于大面积的修复 一新 ----用采样点的颜色替换原图像的颜色 注:Alt+鼠标单击,可拾取采样点。 6、仿制图章工具----仿制图章工具从图像中取样,然后您可将样本应用到其它图像或同一图像的其它部分。 ----仿制图章工具从图像中取样,然后将样本应用到其它图像或同 一图像的其它部分(按Alt键,拾取采样点)。 ----可先自定义一个图案,然后把图案复制到图像的其它区域或其它图像上。

三、小技巧: ①、取消选区:【Ctrl +D 】 ②、反选选区:【Shif+F7】 ③、复位调板:窗口—工作区—复位调板位置。 ④、ctrl+[+、-]=图像的缩放 ⑤空格键:抓手工具 ⑥Atl+Delete = 用前景色填充 Ctrl+Delete = 用背景色填充 第二课:工具的使用二 一、工具栏 自由变换工具:【 Ctrl +T 】 2、使用框选工具的时候,按【Shift 】后再框选,则框选出正圆或正方形。 按【Alt 】后再框选,则选区以鼠标点为中心

envi图像处理基本操作

使用ENVI进行图像处理 主要介绍利用envi进行图像处理的基本操作,主要分为图像合成、图像裁减、图像校正、图像镶嵌、图像融合、图像增强。 分辨率:空间分辨率、波谱分辨率、时间分辨率、辐射分辨率。咱们平时所说的分辨率是指?怎么理解? 1、图像合成 对于多光谱影像,当我们要得到彩色影像时,需要进行图像合成,产生一个与自然界颜色一致的真彩色(假彩色)图像。 对于不同类型的影像需要不同的波段进行合成,如中巴CCD影像共5个波段,一般选择2、4、3进行合成。(为什么不选择其他波段?重影/不是真彩色)。SOPT5影像共7个波段,一般选择7、4、3三个波段。 操作过程以中巴资源卫星影像为例 中巴资源卫星影像共有五个波段,选择2、4、3三个波段对R、G、B赋值进行赋值。 在ENVI中的操作如下: (1)file→open image file→打开2、3、4三个波段,选择RGB,分别将2、4、3赋予RGB。(2)在#1窗口file---〉save image as-→image file。 (3)在主菜单中将合成的文件存为tiff格式(file-→save file as-→tiff/geotiff) 即可得到我们需要的彩色图像。 2、图像裁减 有时如果处理较大的图像比较困难,需要我们进行裁减,以方便处理。如在上海出差时使用的P6、SOPT5,图幅太大不能直接校正需要裁减。 裁减图像,首先制作AOI文件再根据AOI进行裁减。一般分为两种:指定范围裁减、不指定范围裁减。 不指定范围裁减在ENVI中的操作如下: (1)首先将感兴趣区存为AOI文件 file→open image file打开原图像→选择IMAGE窗口菜单overlay→region of interesting 选择划定感兴趣区的窗口如scroll,从ROI_Type菜单选择ROI的类型如Rectangle,在窗口中选出需要选择的区域。在ROI窗口file→Save ROIs将感兴趣区存为ROI文件。

图的基本操作(邻接表)

标头.h #include #include #include #include #define TRUE 1 #define FLASE 0 #define OK 1 #define ERROR 0 #define FALSE 0 #define INFINITY INT_MAX//无穷大 typedef int status; #define MAX_VERTEX_NUM 20 #define MAX_NAME 5 #define MAX_INFO 20 typedef int VRType; typedef int InfoType; typedef char VertexType[MAX_NAME]; enum GraphKind{DG,DN,AG,AN};// 有向图,有向网,无向图,无向图 struct ArcNode { int adjvex; //该弧所指向的顶点的位置 ArcNode *nextarc;//指向吓下一条弧的指针 InfoType *info;//网的权值指针 };//表结点 typedef struct { VertexType data;//顶点信息 ArcNode *firstarc;//第一个表结点的地址,指向第一条依附该顶点的弧的指针 }VNode,AdjList[MAX_VERTEX_NUM]; //头结点 struct ALGraph { AdjList vertices; int vexnum,arcnum;//图的当前顶点数和弧数 int kind; //图的种类标志 }; int LocateVex(ALGraph G,VertexType u) {//初始条件:图G存在,u和G中顶点有相同的特征

好看又专业的流程图是用什么软件做出来的

好看又专业的流程图是用什么软件做出来的导语: 有时候我们在参加商业活动的时候,会看到一些制作非常精美的PPT,里面还包含着各种好看的流程图。其实它的制作方法很简单,如果你也想做出这样的流程图PPT,就跟着小编一起来看看吧! 免费获取亿图图示软件:https://www.doczj.com/doc/9c1994525.html,/edrawmax/ 怎么画出好看的流程图? 看似专业又好看的流程图当然是用专业的软件画的了。亿图图示,一款可以绘制专业流程图的工具,拖拽式操作,10000+矢量素材,支持导出PPT、图片、PDF、HTML、PS等格式。除此以外,还可以将流程图作品存储到亿图云,或直接打印出来。

亿图图示软件特色: 1、来自全球超过600万的用户选择下载安装。 2、支持多系统操作:亿图图示工作流程图图可以在Windows,Mac 和 Linux上进行制作。 3、产品升级:亿图软件不断更新升级,重视用户体验度。 4、简单操作:一键式绘制工具帮助用户绘制快捷,方便使用者管理工作项目。 如何在PPT里画出好看的流程图 使用亿图图示软件绘制流程图,可以通过软件的导出功能,一键将文件导出为PPT格式的文件。导出的文件,可以在PPT中继续编辑、修改,进行幻灯片演示等等。

所谓千言万语不如一张图,尤其是在进行PPT幻灯片演示的时候,将繁杂琐碎的事物用简单、明了的流程图表达出来,能够让观看者对事物进行中的顺序、布置和安排有更加生动的了解。 下面让我们一起来看几张适合做PPT展示用的流程图模板: 圆点PPT流程图模板

扁平化商务总结汇报PPT模板 极简设计风的PPT流程图模板

除了以上几种设计十足的PPT流程图模板,少不了还有工作中经常需要用到的一些基本的流程图,能够满足日常工作的基本绘图需求。 获取更多流程图软件支持与帮助:https://www.doczj.com/doc/9c1994525.html,/support/

Photoshop基本操作介绍(图文介绍)

第一课:工具的使用 、 Photoshop 简介: Adobe 公司出品的 Photoshop 是目前最广泛的图像处理软件,常用于广告、艺术、平面 设计等创作。也广泛用于网页设计和三维效果图的后期处理,对于业余图像爱好者,也 可将自己的照片扫描到计算机,做出精美的效果。总之, Photoshop 是一个功能强大、 用途广泛的软件,总能做出惊心动魄的作品。 、认识工具栏 1、 选框工具 :用于选取需要的区域 选择一个像素的横向区域 选择一个像素的竖向区域

注:按 shift 键 +框选,可画出正方形或正圆形区域 可根据颜色的区别而自动产生套索选区 根据颜色相似原理,选择颜色相近的区域。 5、 修复工具 : 类似于“仿制图工具” ,但有智能修复功能。 用于大面积的修复 用采样点的颜色替换原图像的颜色 注: Alt+ 鼠标单击,可拾取采样点。 6、仿制图章工具 仿制图章工具从图像中取样, 然后您可将样本应用到其它图像或同一 图像的其它部分。 - 仿制图章工具从图像中取样,然后将样本应用到其它图像或同 一图像的其它部分(按 Alt 键,拾取采样点) 。 区域或其 它图像上。 2、 移动工具 : 3、 套索工具 : 用于移动图层或选区里的图像 - - 用于套索出选区 用于套索出多边形选 区 属性栏: 选区相交 单个选区 选区相加 选区相减 4、魔术棒工具 ,定义可抹除的颜色范围,高容差会抹除范围更广的像素。 且是 --------- -

三、小技巧: ①、取消选 区: 【Ctrl +D】 ②、反选选 区: 【Shif+F7 】 ③、 复位调 板: 窗口—工作区—复位调板位置。 ④、 ctrl+[+ 、 -]= 图像的缩放 ⑤空格键:抓手工具 ⑥ Atl+Delete = 用前景色填充 Ctrl+Delete = 用背景色填充 第二课:工具的使用二 模1、糊自工由具变换工具:【Ctrl +T】减淡工具 模糊工具 2、使用框选工具的时候,按【Shift 】后再框选,则框选出正圆或正方形。

用Word制作漂亮工作流程图的方法

在日常的很多实际任务中,我们可能需要表达某个工作的过程或流程。有些工作的过程比较复杂,如果你仅仅用文字表达,通常是很难描述清楚的。与此同时,听者也难于搞懂,在这种情况下,最好的方式就是绘制工作流程图,图形的直观性会让双方都大大获益。 笔者曾经介绍过用MS VISIO 2002制作工作流程图的方法(请参阅《用Visio 做工作流程图》),但是很多朋友反映自己的电脑上并没有安装VISIO,而且对VISIO还有种陌生感。为了便于更多的朋友轻松地制作工作流程图,下面我们介绍利用Word制作漂亮工作流程图的方法。 任务要求:这里我们还是以制作毕业论文写作流程图为例,该工作流程图表达的是数理信息学院毕业生毕业论文的制作过程。 步骤一:页面和段落的设置 步骤二:制作流程图的标题 步骤三:绘制流程图框架 步骤四:流程图的对齐与修饰 步骤五:添加连接箭头 步骤六:添加折线连接符和说明性文字 为了让朋友们对制作目标有个大概的了解,下面先来看一下完成后的效果图(图 1)。

为了提高工作流程图的制作效率,在具体制作之前应该先在头脑中构思一下流程图的大概效果,最好能够在稿纸上把效果图画出来,这往往比边想边做要快很多。 在纸上画好草图之后,我们就可以打开Word 2003进行具体的制作了,本例的操作是在Word 2003中进行的,使用Word其它版本的朋友可以参照进行。 步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图 2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。

图的基本操作与实现的课程设计报告

图的基本操作与实现的课程设计报 告 中国矿业大学徐海学院计算机系 《软件认知实践》报告 姓名:_学号: 专业:___________________

设计题目:_______________ 指导教师:____________________________ 2013年12月30日

第1章题目概述 第1.1节题目要求. 第1.2节主要难点 第2章系统流程 第3章数据结构和算法 第4章核心代码分析.. 第5章复杂度分析 参考文献 第一章题目概述 第1.1节题目要求 (1) 自选存储结构,输入含n 个顶点(用字符表示顶点)和e 条边的图G ; (2) 求每个顶点的度,输出结果; (3) 指定任意顶点x 为初始顶点,对图G 作DFS 遍历,输出DFS 顶点序列(提示:使用一个栈 实 现 DFS); ⑷指定任意顶点x 为初始顶点,对图G 作BFS 遍历,输出BFS 顶点序列(提示:使用一个队列 实现BFS); (5) 输入顶点x,查找图G:若存在含x 的顶点,则删除该结点及与之相关连的边,并作DFS 遍 历(执行操作3);否则输出信息“无x” ; (6) 判断图G 是否是连通图,输出信息“YES” / “NO”; (7) 如果选用的存储结构是邻接矩阵,则用邻接矩阵的信息生成图G 的邻接表,即复制图G, 然再执行操作(2);反之亦然。 .2 .2 .3 .4 .5 .6 25 25

第1. 2节主要难点 (1)自选存储结构创建一个图:通过用户从键盘敲入的两个数值分别确定图的顶点数和边数,选择邻接矩阵存储结构将图的结点信息存储在一个顺序表中,图的边信息存储在一个二维数组中。 (2)求每个顶点的度:

制作工作流程图

步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。

步骤二:制作流程图的标题 基本工作环境设置好之后就开始制作流程图的标题。大家看到的最终效果中的标题是放在一个矩形自选图形中的,下面开始制作。 1.在窗口Word窗口底部的自选图形工具栏中选择“矩形”按钮(图 4)。 2.这时可以在页面中看到“在此创建图形”的画布,接着拖动鼠标,在该画布中绘制矩形,让矩形的宽度与画布相同,高度可参照最终效果图,约3厘米。

3.画好后调整画布的高度,使之与矩形的高度相同(图 5)。 4.接下来选中插入的矩形,单击鼠标右键,在弹出的菜单中选择“设置自选图形格式”命令,打开“设置自选图形格式”对话框,在“颜色与线条”选项卡中,先设置线条颜色为“无线条颜色”,接着单击“填充”区“颜色”下拉箭头,选择“其它颜色”命令,打开“颜色”对话框,参照下图设置填充颜色(图6),完成后依次单击两次“确定”。 5.接下来在矩形框中插入艺术字标题。选中矩形框,单击鼠标右键,在弹出的菜单中选择“添加文字”命令,这时可以看到光标在矩形框内闪动,表示等待添加文字。

画框图流程图用什么软件

在工作中,我们常用到的流程图有:业务流程图、页面流程图和数据流程图。作为产品,经常谈的是业务流程图;作为交互设计师,则比较关心页面流程图;而作为系统分析师,数据流程图最关键,业务流程图,顾名思义,用来描述业务流程的一种图,通过一些特定的符号和连线来表示具体某个业务的实际处理步骤和过程,详细地描述任务的流程走向,一般没有数据的概念。 当你对那些简洁美观的流程图感到羡慕不已,是否好奇它们是怎样做出来的,是否想知道需要什么样的专业技能。今天,这一切将变得非常简单,你只需要点击几下鼠标就能制作出属于自己的可视化流程图。而且一切操作都异常简洁。

流程图的基本符号 首先,设计流程图的难点在于对业务逻辑的清晰把握。熟悉整个流程的方方面面。这要求设计者自己对任何活动、事件的流程设计,都要事先对该活动、事件本身进行深入分析,研究内在的属性和规律,在此基础上把握流程设计的环节和时序,做出流程的科学设计。研究内在属性与规律,这是流程设计应该考虑的基本因素。也是设计一个好的流程图的前提条件。 然后再根据事物内在属性和规律进行具体分析,将流程的全过程,按每个阶段的作用、功能的不同,分解为若干小环节,每一个环节都可以用一个进程来表示。在流程图中进程使用方框符号来

表达。

既然是流程,每个环节就会有先后顺序,按照每个环节应该经历的时间顺序,将各环节依次排开,并用箭头线连接起来。箭头线在流程图中表示各环节、步骤在顺序中的进展。 对某环节,按需要可在方框中或方框外,作简要注释,也可不作注释。 经常判断是非常重要的,用来表示过程中的一项判定或一个分岔点,判定或分岔的说明写在菱形内,常以问题的形式出现。对该问题的回答决定了判定符号之外引出的路线,每条路线标上相应的回答。 选择好的流程图制作工具 亿图发布第一款支持快捷操作的流程图制作工具从而极大的降低了专业流程设计的门槛,让大多数人可以在很短的时间里绘制出专业的流程图。 现在我来介绍一下亿图软件在流程图制作上的优势。常言道:工欲善其事,必先利其器。面对每天纷繁复杂的工作,好的工具是必不可少的。流程图虽然简单,但是在各行各业中也演变出很多细分领域。每个领域都使用自己特有的符号来表达。如果没有特别的需求,常用的流程图,可以直接选择基本流程图模板即可。如果流程处理设计多个部门,职能,则可以选择跨职能流程图。如果设计数据交互,可以绘制数据流程图。需要用来描述各个部门的职能和业务流程的可以选择工作流程图,顾名思义,工作流程图就是指企业内部发生的某项业务从起始到完成,由多个部门、多个岗位、经多个环节协调共同完成的完整过程。

教你如何制作流程图

在标书编制或者施工方案编写工作中,我们常常会需要绘制施工工艺流程图。如果使用比较经典的流程图绘制工具,比如Visio,可能会觉得比较麻烦,而且也不容易与Word文档一起排版。这时你可能会采用Word自带的流程图绘图工具来绘制流程图。但是,Word的早期版本,即使是Word2000在流程图的绘制,尤其是修改方面都是非常麻烦的。我们常常需要在线条的对准等细节问题上耗费大量的时间。 在网上看到很多网友上传的流程图不是很规范,主要反应在以下几方面:●不符合工艺的实际流程。 ●逻辑关系混乱,不是逻辑关系不全就是逻辑关系错误。 ●很多网友绘制流程图使用的是文本框加箭头的方式绘制,在排版上不 美观,文本框大小不一,不整齐。 那么有没有更好的办法使画出来的工艺流程图既美观又快捷呢?有,在Office XP以上的版本在流程图的绘制方面引入了Visio的很多绘图工具,比如连接符。这时的流程图的绘制比以前方便了许多,也容易了许多。这里,就详细介绍一下使用Word2003绘制流程图的方法。 1、首先在“绘图”工具栏上,单击“自选图形”,指向“流程图”,再单击所需的形状。 注:流程图中的各种形状主要程序编程流程图的形状,多数形状对于我

们工程上的工艺流程图用处不是很大,概括起来,可用的就四种,分别是“过程”、“决策”、“终止”、“准备”四种。 2、单击要绘制流程图的位置。此时你会发现,在页面上出现了如下图所示的虚框。这是什么?以前的版本好像没这东东啊。是,这是Word2003新增功能之一的绘图画布。 绘图画布是在创建图形对象(例如自选图形和文本框)时产生的。它是一个区域,可在该区域上绘制多个形状。因为形状包含在绘图画布内,所以它们可作为一个单元移动和调整大小。明白吧,这个绘图画布可帮助您排列并移动多个图形,当图形对象包括几个图形时这个功能会很有帮助。还记得以前要在Word中排列、移动一组图形的麻烦吗?有了绘图画布,这些烦恼就不再困扰你了。 绘图画布还在图形和文档的其他部分之间提供一条类似框架的边界。在默认情况下,绘图画布没有背景或边框,但是如同处理图形对象一样,可以对绘图画布应用格式。 3、在绘图画布上插入你选择的那个图形。就像这样,插入一个凌形。

win10能用的画流程图软件

一般来说,制造PFD、P&ID,相关专业从事人员都是运用Visio或许AutoCAD、PIDCAD这些软件。软件都各有其长处和缺陷。AutoCAD、PIDCAD这样的纯专业软件,在软件的操作与使用上的 一般都需求花费必定的学习时间,而Visio这样的操作简略便当、又支撑制造多种图表的工艺流程 图制造软件,关于大部分人来说,是相对正确的挑选。但,Visio颇高的价格有时也会让人犹豫是否购买。那有没有类似于Visio这样操作简略、价格又适中的工艺流程图制造软件呢?答案是肯定的。 流程图又被称作输入输出图。需要使用一些标准符号来代表某些类型的动作,如决策用菱形框 表示,具体活动用方框表示。由于绘制流程图需使用较多的图框和线条,依靠普通的办公软件很难 快速完成绘制。 丰富的流程图模板和例子,有效提升工作效率 亿图图示软件是一款专业的流程图绘制软件,不仅有海量的模板和例子,更有流畅的操作体验。 流程图模板 软件可以创建多种类型的流程图,例如数据流程图、时间流程图、工作流程图等。

流程图例子 几十个例子随心选取,双击例子便能选用,方便用户进行二次的修改和创作,省去重新创建的麻烦。

流程图符号 可满足流程图的绘制需求,矢量符号通过拖拽至画布,就能直接作用。

在选择好绘图工具以后,接下来我们就要开始准备画流程图了。 1、打开亿图图示软件,选择新建―流程图―创建空白文档进入画布,也可以选择自己喜欢的流程图模板点击进入。 2、进入之后我们可以左侧面板选择想要的图形素材,用鼠标点击或拖动它到图表区域中。 3、选择完之后双击图形可以在里面输入文本内容。输入完成后可以在右侧面板中自由更改图形线条颜色、粗细等样式。

图的基本操作 实验报告

实验五图的基本操作 一、实验目的 1、使学生可以巩固所学的有关图的基本知识。 2、熟练掌握图的存储结构。 3、熟练掌握图的两种遍历算法。 二、实验内容 [问题描述] 对给定图,实现图的深度优先遍历和广度优先遍历。 [基本要求] 以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。 【测试数据】 由学生依据软件工程的测试技术自己确定。 三、实验前的准备工作 1、掌握图的相关概念。 2、掌握图的逻辑结构和存储结构。 3、掌握图的两种遍历算法的实现。 四、实验报告要求 1、实验报告要按照实验报告格式规范书写。 2、实验上要写出多批测试数据的运行结果。 3、结合运行结果,对程序进行分析。

五、算法设计 1、程序所需头文件已经预处理宏定义和结构体定义如下 #include #define MaxVerNum 100 struct edgenode { int endver; int inform; edgenode* edgenext; }; struct vexnode { char vertex; edgenode* edgelink; }; struct Graph { vexnode adjlists[MaxVerNum]; int vexnum; int arcnum; }; 2、创建无向图 void CreatAdjList(Graph* G) { int i,j,k; edgenode* p1; edgenode* p2; cout<<"请输入顶点数和边数:"<>G->vexnum>>G->arcnum; cout<<"开始输入顶点表:"<vexnum;i++) { cin>>G->adjlists[i].vertex; G->adjlists[i].edgelink=NULL; } cout<<"开始输入边表信息:"<arcnum;k++) { cout<<"请输入边对应的顶点:"; cin>>i>>j; p1=new edgenode; p1->endver=j; p1->edgenext=G->adjlists[i].edgelink; G->adjlists[i].edgelink=p1;

Photoshop基本操作介绍图文介绍

Photoshop基本操作介绍(图文介绍)

————————————————————————————————作者:————————————————————————————————日期:

第一课:工具的使用 一、Photoshop简介: Adobe公司出品的Photoshop是目前最广泛的图像处理软件,常用于广告、艺术、平面设计等创作。也广泛用于网页设计和三维效果图的后期处理,对于业余图像爱好者,也可将自己的照片扫描到计算机,做出精美的效果。总之,Photoshop是一个功能强大、 用途广泛的软件,总能做出惊心动魄的作品。 二、认识工具栏 1、选框工具:用于选取需要的区域 ----选择一个像素的横向区域 套索工具 移动工具 魔术棒工具 修复工具 仿制图章工具 选框工具 裁剪工具

----选择一个像素的竖向区域 属性栏: 注:按shift 键+框选,可画出正方形或正圆形区域 2、移动工具: -----用于移动图层或选区里的图像 3、套索工具: ----用于套索出选区 ----用于套索出多边形选区 ----可根据颜色的区别而自动产生套索选区 4、魔术棒工具: ----根据颜色相似原理,选择颜色相近的区域。 注:“容差”,定义可抹除的颜色范围,高容差会抹除范围更广的像素。 5、修复工具: 且是 ----类似于“仿制图工具”,但有智能修复功能。 ----用于大面积的修复 一新 ----用采样点的颜色替换原图像的颜色 注:Alt+鼠标单击,可拾取采样点。 6、仿制图章工具 ----仿制图章工具从图像中取样,然后您可将样本应用到其它图像或同一图像的其它部分。 ----仿制图章工具从图像中取样,然后将样本应用到其它图像或同 一图像的其它部分(按Alt 键,拾取采样点)。 单个选区 选区相加 选区相减 选区相交

mac的免费流程图软件

流程图是一种表示算法的图示,通常用图形将操作步骤,用带箭头的线连接起来的一系列操作,用 以表示执行任务的前后步骤。通过流程图直观的展示,更易于工作参与人员的理解。根据美国标准 化协会确定的流程图符号,也常被世界工作者所采用,常用的流程图符号有处理框、判断框、输入 输出框、起止框、连接点、流程线和注释框。 亿图图示是一款跨平台(Windows、Mac、Linux)、多功能、同时支持云储存、分享功能的专业 图形图表绘制软件。亿图图示同时支持绘制工艺流程图(PFD、P&ID)、思维导图、电路图、组织结 构图、建筑平面图、计算机网络、信息图等200种以上的图形图表,是一款真正功能强大的制图软件。软件提供矢量基础的12000个以上的符号、800个以上的模板和例子以供用户绘图使用。同时,亿图图示也支持多种类型文件的导入导出,导入如Visio、SVG,导出如Visio、SVG、HTML、JPG、PNG、PDF、Office文件等等。

作为一款类似Visio的工艺流程图绘制软件,亿图图示有哪些让用户眼前一亮的地方呢?在这里,我从亿图图示与Visio的相同点与不同点两个角度,以下5个方面,分别详细阐述一下。 1.使用方便、功能强大的绘图工具 如下图所示,在工艺流程图的绘制上,亿图图示搭载了与Visio不相上下的、使用方便的智能 工具。不论是符号拖放、自动连接、还是快速替换图形等,亿图图示都能做到Visio一样的方便快捷。而在添加附件、注释、云共享、图形自主设计等方面,亿图图示相较于Visio是更胜一筹的。

2.工艺流程图符号库 为方便用户快速绘制PFD、P&ID,Visio和亿图图示都提供了设备、仪器、管路等大量的工艺流程图元素符号。而相比于Visio的4个工艺流程图符号库,亿图图示拥有更专业、丰富的工艺流程图符号库,包括管道、泵、电动机、破碎仪等设备、仪器等。每中类别的设备符号都设计有许多样式,用户可根据自身需要选择。另外,所有符号都是矢量基础设计的,可以进行颜色修改、大小调整、分解/结合等再次编辑。

相关主题
文本预览
相关文档 最新文档