1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/*************************************************************************
* Copyright (c) 2011 AT&T Intellectual Property
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Details at https://graphviz.org
*************************************************************************/
#pragma once
#include <ortho/structures.h>
#include <stdbool.h>
typedef struct snode snode;
typedef struct sedge sedge;
/** @brief a node of search graph @ref sgraph,
* is created as a border segment between two adjusted cells of type @ref cell.
*
* Nodes and a search graph are created by functions @ref mkMazeGraph, @ref findSVert and @ref createSNode.
*/
struct snode {
int n_val, n_idx;
snode* n_dad;
sedge* n_edge;
short n_adj;
short save_n_adj;
struct cell* cells[2]; ///< [0] - left or botom, [1] - top or right adjusted cell
/** @brief edges incident on this node
* -- stored as indices of the edges array in the graph
*/
int* adj_edge_list;
int index;
bool isVert; /* true if node corresponds to vertical segment */
};
struct sedge {
double weight; /* weight of edge */
int cnt; /* paths using edge */
/* end-points of the edge
* -- stored as indices of the nodes vector in the graph
*/
int v1, v2;
};
typedef struct {
int nnodes, nedges;
int save_nnodes, save_nedges;
snode* nodes;
sedge* edges;
} sgraph;
extern void reset(sgraph*);
extern void gsave(sgraph*);
extern sgraph *createSGraph(size_t);
extern void freeSGraph (sgraph*);
extern void initSEdges(sgraph *g, size_t maxdeg);
extern int shortPath (sgraph* g, snode* from, snode* to);
extern snode* createSNode (sgraph*);
extern sedge* createSEdge (sgraph* g, snode* v0, snode* v1, double wt);
|