ref: e66c8868c7cf48c23f2c49e2bb933784a1a02d6d
dir: /path/path.h/
typedef struct State State; typedef struct PState PState; typedef struct Node Node; typedef struct Prof Prof; struct PState{ int open; int closed; Node *from; Node *to; void *aux; }; struct State{ int blocked; PState; }; struct Node{ Vertex; State; }; int isblocked(Node*); void toggleblocked(Node*); enum{ Deuclid, Dmanhattan, Doctile, }; double eucdist(Node*, Node*); double octdist(Node*, Node*); double manhdist(Node*, Node*); extern double (*distfn)(Node*, Node*); Node* p2n(Vertex); Vertex n2p(Node*); enum{ Move8, Move4, }; extern int movemode; enum{ θ∅ = 0, θ→ = 1<<0, θ↘ = 1<<1, θ↓ = 1<<2, θ↙ = 1<<3, θ← = 1<<4, θ↖ = 1<<5, θ↑ = 1<<6, θ↗ = 1<<7, }; extern Node *grid; extern int gridwidth, gridheight; void dprintpath(Node*, Node*); void clearpath(void); void cleargrid(void); Node* initgrid(int, int); double unitmovecost(Node*, Node*); Node** expand(Node*); int a∗findpath(Node*, Node*); int bfsfindpath(Node*, Node*); int dijkstrafindpath(Node*, Node*); struct Prof{ double dist; double cost; int steps; int opened; int expanded; int updated; int closed; }; extern Prof stats; extern int doprof; #pragma varargck type "N" Node* #pragma varargck type "V" Vertex