1 class Node{
2 public:
3 int value;
4 Node *next;
5 Node(const int nodeValue,Node *nextNode){
6 value=nodeValue;
7 next=nextNode;
8 }
9 Node(Node *nextNode){
10 next=nextNode;
11 }
12 };
13
14 class LinkList{
15 private:
16 Node *head;
17 Node *tail;
18 Node *fence;
19 int leftcnt;
20 int rightcnt;
21
22 void init(){
23 head=tail=fence=new Node(0,NULL);
24 leftcnt=rightcnt=0;
25 }
26
27 void removeAll(){
28 while(head!=0){
29 fence=head;
30 head=head->next;
31 delete fence;
32 }
33 }
34 public:
35 LinkList() {
36 init();
37 }
38 ~LinkList() {
39 removeAll();
40 }
41 void clear() {
42 removeAll();
43 init();
44 }
45 bool insert(const int &item){
46 fence->next=new Node(item,fence->next);
47 if(tail==fence)
48 tail=fence->next;
49 return true;
50 }
51 bool append(const int &item){
52 tail=tail->next=new Node(item,NULL);
53 rightcnt++;
54 return true;
55 }
56 bool remove(int &it){
57 if(fence->next==NULL)
58 return false;
59 it=fence->next->value;
60 Node *ltemp=fence->next;
61 fence->next=ltemp->next;
62 delete ltemp;
63 if(tail==ltemp)
64 tail=fence;
65 rightcnt--;
66 return true;
67 }
68 void setStart() {
69 fence=head;
70 rightcnt+=leftcnt;
71 leftcnt=0;
72 }
73 void setEnd() {
74 fence=tail;
75 leftcnt+=rightcnt;
76 rightcnt=0;
77 }
78 void prev(){
79 Node *ltemp=head;
80 if(fence==head) return;
81 while(ltemp->next!=fence)
82 ltemp=ltemp->next;
83 fence=ltemp;
84 leftcnt--;
85 rightcnt++;
86 }
87 void next(){
88 if(fence!=tail){
89 fence=fence->next;
90 leftcnt++;
91 rightcnt--;
92 }
93 }
94 int leftLength() const {
95 return leftcnt;
96 }
97 int rightLength() const { return rightcnt; }
98 bool setPos(int pos){
99 if((pos<0)||(pos>(rightcnt+leftcnt)))
100 return false;
101 fence=head;
102 for(int i=0;i<pos;i++)
103 fence=fence->next;
104 return true;
105 }
106 bool getValue(int & it) const{
107 if(rightLength()==0)
108 return false;
109 else
110 it=fence->next->value;
111 return true;
112 }
113 void print() const{
114 Node *ltemp=head;
115 cout<<"<";
116 while(ltemp!=fence){
117 cout<<ltemp->next->value<<" ";
118 ltemp=ltemp->next;
119 }
120 cout<<"|";
121 while(ltemp->next!=NULL){
122 cout<<ltemp->next->value<<" ";
123 ltemp=ltemp->next;
124 }
125 cout<<">\n";
126 }
127 };
1 #include<iostream>
2 using namespace std;
3
4 struct Node
5 {
6 int value;
7 Node *next;
8 };
9
10 int main()
11 {
12 Node *head,*list,*tmp;
13 tmp=new Node;
14 tmp->value=1;
15 tmp->next=NULL;
16 head=list=tmp;
17 int total=0,outIndex=0,outcount=0,noout=0;
18 cout<<"Input totoal:";
19 cin>>total;
20 cout<<"Input out index:";
21 cin>>outIndex;
22
23 for(int i=1;i<total;i++)
24 {
25 Node *temp=new Node;
26 temp->value=1;
27 temp->next=NULL;
28 list->next=temp;
29 list=list->next;
30 }
31 list->next=head;
32 list=head;
33 /*
34 Node *temp=list;
35 for(int i=0;i<total;i++)
36 {
37 cout<<temp->value<<" ";
38 temp=temp->next;
39 }
40 */
41 while(1)
42 {
43 if(outcount==total-1)
44 break;
45
46 if(noout==(outIndex-1))
47 {
48 if(list->value!=0)
49 {
50 list->value=0;
51 noout=0;
52 outcount++;
53 Node *temp=head;
54 for(int i=0;i<=total;i++)
55 {
56 cout<<temp->value<<" ";
57 temp=temp->next;
58 }
59 cout<<endl;
60 }
61 }
62 else
63 {
64 noout+=list->value;
65 }
66 list=list->next;
67
68 }
69
70 system("pause");
71 return 0;
72 }
1 class Node{
2 public:
3 int value;
4 Node *next;
5 Node(const int nodeValue,Node *nextNode){
6 value=nodeValue;
7 next=nextNode;
8 }
9 Node(Node *nextNode){
10 next=nextNode;
11 }
12 };
13
14 class LinkStack{
15 private:
16 Node *top;
17 int size;
18 public:
19 LinkStack(int sz){
20 top=NULL;
21 size=0;
22 }
23
24 void clear(){
25 while(top!=NULL){
26 Node *tmp=top;
27 top=top->next;
28 delete tmp;
29 }
30 size=0;
31 }
32
33 bool push(const int &item){
34 top=new Node(item,top);
35 size++;
36 return true;
37 }
38
39 bool pop(int &it){
40 if(size==0)
41 return false;
42 it=top->value;
43 Node *tmp=top;
44 top=top->next;
45 delete tmp;
46 size--;
47 return true;
48 }
49
50 bool topValue(int &it){
51 if(size==0)
52 return 0;
53 it=top->value;
54 return true;
55 }
56
57 int length() const{
58 return size;
59 }
60 };
1 #include <iostream>
2 using namespace std;
3
4 int maze[12][12]={ 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1,
5 1, 0, 1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,1,
6 1, 0, 0 ,1 ,0 ,0 ,1 ,0 ,1 ,0 ,0 ,1,
7 1, 0, 0 ,0 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,1,
8 1, 0, 1 ,0 ,1 ,0 ,1 ,0 ,1 ,1 ,0 ,1,
9 1, 0, 1 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,0 ,1,
10 1, 0, 1 ,1 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,1,
11 1, 0, 1 ,0 ,0 ,0 ,1 ,0 ,1 ,0 ,1 ,1,
12 1, 0, 1 ,0 ,1 ,1 ,1 ,0 ,1 ,0 ,0 ,1,
13 1, 0, 0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,1,
14 1, 0, 0 ,0 ,0 ,1 ,1 ,1 ,1 ,0 ,0 ,1,
15 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1
16 };
17
18 struct Position{
19 int row;
20 int col;
21 };
22
23 bool findPath(){
24 LinkStack *path=new LinkStack();
25 Position offset[4];
26 offset[0].row=0; offset[0].col=1;
27 offset[1].row=1; offset[1].col=0;
28 offset[2].row=0; offset[2].col=-1;
29 offset[3].row=-1; offset[3].col=0;
30
31 Position cur;
32 cur.row=1;
33 cur.col=1;
34 maze[1][1]=6;
35
36 int option=0,lastOption=3;
37 while(cur.row!=10||cur.col!=10){
38 int r,c;
39 bool isNode=false;
40
41 option=0;
42 while(option<=lastOption){
43 r=cur.row+offset[option].row;
44 c=cur.col+offset[option].col;
45 if(maze[r][c]==0){
46 isNode=true;
47 break;
48 }
49 option+=1;
50 }
51 if(isNode){
52 cur.row=r;
53 cur.col=c;
54 path->push(cur);
55 maze[r][c]=2;
56 //option=0;
57 }
58 else{
59 if(path->length()==0)
60 return false;
61 maze[r][c]=3;
62 //Position pre;
63 path->pop(cur);
64 cout<<"("<<cur.row<<","<<cur.col<<")"<<"->";
65 /*
66 if(pre.row==cur.row)
67 option=2+pre.col-cur.col;
68 else
69 option=3+pre.row-cur.row;
70 */
71 //cur=pre;
72 }
73 }
74
75 LinkStack *p2=new LinkStack();
76
77 while(path->length()!=0){
78 path->pop(cur);
79 p2->push(cur);
80 }
81 cout<<endl;
82 while(p2->length()!=0){
83 p2->pop(cur);
84 cout<<"("<<cur.row<<","<<cur.col<<")"<<"->";
85 }
86 cout<<endl;
87
88 return true;
89 }
90
91 int main(){
92 for(int i=0;i<12;i++){
93 for(int j=0;j<12;j++)
94 cout<<maze[i][j]<<" ";
95 cout<<endl;
96 }
97 cout<<endl;
98
99 findPath();
100
101 cout<<endl;
102 for(int i=0;i<12;i++){
103 for(int j=0;j<12;j++)
104 cout<<maze[i][j]<<" ";
105 cout<<endl;
106 }
107 system("pause");
108 return 0;
109 }
1 template<class Elem>class Node{
2 public:
3 Elem value;
4 Node *next;
5 Node(const Elem nodeValue,Node *nextNode){
6 value=nodeValue;
7 next=nextNode;
8 }
9 Node(Node *nextNode){
10 next=nextNode;
11 }
12 };
13
14 template<class Elem>class LinkQueue{
15 private:
16 Node<Elem> *front;
17 Node<Elem> *rear;
18 int size;
19 public:
20 LinkQueue(){
21 front=rear=NULL;
22 size=0;
23 }
24
25 ~LinkQueue(){
26 clear();
27 }
28
29 void clear(){
30 while(front!=NULL){
31 rear=front;
32 front=front->next;
33 delete rear;
34 }
35 rear=NULL;
36 size=0;
37 }
38
39 bool enqueue(const Elem &it){
40 if(rear==NULL)
41 front=rear=new Node<Elem>(it,NULL);
42 else{
43 rear->next=new Node<Elem>(it,NULL);
44 rear=rear->next;
45 }
46 size++;
47 return true;
48 }
49
50 bool dequeue(Elem &it){
51 if(size==0)
52 return false;
53 it=front->value;
54 Node<Elem>*temp=front;
55 front=front->next;
56 delete temp;
57 if(front==NULL)
58 rear=NULL;
59 size--;
60 }
61
62 bool frontValue(Elem &it){
63 if(size==0)
64 return false;
65 it=front->value;
66 return true;
67 }
68
69 int length() const{
70 return size;
71 }
72 };