00001 00059 /* 00060 * list.h 00061 * 00062 * Created on: 11.06.2012 00063 * Author: josh 00064 */ 00065 00066 #ifndef LIST_H_ 00067 #define LIST_H_ 00068 00069 00070 00071 00076 struct SVALUE 00077 { 00078 unsigned int v,hops; 00079 00080 SVALUE(){} 00081 00082 SVALUE(const unsigned int v, const unsigned int hops) 00083 :v(v), hops(hops) 00084 {} 00085 00086 }; 00087 00091 template<typename VALUE> 00092 struct VISITED_LIST { 00093 int size; 00094 int pos; 00095 std::vector<VALUE> vals; 00096 00097 VISITED_LIST():size(0),pos(-1), vals(1000) { 00098 } 00099 00100 inline void init() 00101 { 00102 size=(0); 00103 pos=(-1); 00104 } 00105 00106 inline void add(const VALUE &v) { 00107 if((size_t)size>=vals.size()) 00108 vals.push_back(v); 00109 else 00110 vals[size]=v; 00111 ++size; 00112 } 00113 00114 inline void move() {++pos;} 00115 00116 inline void remove() { 00117 --size; 00118 if(pos<size) vals[pos]=vals[size]; 00119 --pos; 00120 } 00121 00122 inline void replace(const VALUE &v) { 00123 vals[pos]=v; 00124 } 00125 }; 00126 00127 00132 struct SXY { 00133 int x,y; 00134 bool back; 00135 }; 00136 00140 struct SXYcmp { 00141 inline bool operator() (const SXY& lhs, const SXY& rhs) const 00142 {if(lhs.y==rhs.y) 00143 return lhs.x<rhs.x; 00144 return lhs.y<rhs.y;} 00145 }; 00146 00147 #endif /* LIST_H_ */