diff --git "a/2017-1/HuanWoWeiLan/\347\254\254\344\270\203\346\254\241\344\275\234\344\270\232/\347\254\254\344\270\203\346\254\241\344\275\234\344\270\232.c" "b/2017-1/HuanWoWeiLan/\347\254\254\344\270\203\346\254\241\344\275\234\344\270\232/\347\254\254\344\270\203\346\254\241\344\275\234\344\270\232.c"
new file mode 100644
index 00000000..bca33694
--- /dev/null
+++ "b/2017-1/HuanWoWeiLan/\347\254\254\344\270\203\346\254\241\344\275\234\344\270\232/\347\254\254\344\270\203\346\254\241\344\275\234\344\270\232.c"
@@ -0,0 +1,241 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+//ͼ������洢��ʾ
+#define INFINITY   99999        //���ֵ����
+#define MAX_VERTEX_NUM 20         //��󶥵����
+int visited[MAX_VERTEX_NUM ];    //���ʱ�־���飬��ʼֵΪFALSE(0)��һ��ij�����㱻���ʣ�������ֵΪTRUE(1).
+typedef struct ArcCell            //���Ķ���
+{
+	int adj;                      //��1��0��ʾ�Ƿ�����
+}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
+typedef struct                    //ͼ�Ķ���
+{
+	AdjMatrix arcs;               //�ڽӾ���
+	int vexnum,arcnum;            //�������ͻ���
+}Graph;
+
+//-------------����------------
+#define MAXQSIZE 100
+typedef struct QNode
+{
+	int data;
+	struct QNode *prious;
+	struct QNode *next;
+}QNode,LinkList,*QueuePtr;
+
+typedef struct
+{
+	QueuePtr front;
+	QueuePtr rear;
+}LinkQueue;
+
+
+typedef enum
+{
+	OK,
+	ERROR,
+	OVERFLOW
+}Status;
+typedef enum
+{
+	false,
+	true
+}bool;
+
+//ͼ�Ļ�������
+
+//���㸳ֵ
+Status Add(Graph *G, int x, int y)
+{
+	if(x >= MAX_VERTEX_NUM || y >= MAX_VERTEX_NUM) 
+	{
+		return ERROR;
+	}
+	G -> arcs[x][y].adj = G ->arcs[y][x].adj = 1;
+	return OK;
+}
+//����ͼ���������ʾ����
+Status CreateGraph(Graph *G)
+{
+	int i ,j;
+	G -> vexnum = 9;//������
+	G -> arcnum = 12;//����
+
+	for(i = 0; i < G -> vexnum; i++)
+	{
+		for(j = 0; j < G ->arcnum; j++)
+		{
+			G -> arcs[i][j].adj = INFINITY;    //��ʼ���ڽӾ�����ÿһ��ֵ��Ϊ����
+		}
+	}
+	Add(G, 0, 1); Add(G, 0, 2); Add(G, 0, 3); Add(G, 0, 6);
+    Add(G, 1, 2); Add(G, 3, 4); Add(G, 3, 5); Add(G, 4, 5); 
+    Add(G, 5, 7); Add(G, 6, 7); Add(G, 6, 8); Add(G, 7, 8); 
+
+	return OK;
+}
+//���ص�һ���ڽӶ��㣬û�еĻ�����-1 
+int FirstAdjVex(Graph G, int i) 
+{ 
+	int k; 
+	for (k = 0; k < G.vexnum; k++) 
+	{ 
+		if (G.arcs[i][k].adj == 1) //�ڽӾ���ͬһ����Ϊ1�ĵ㶼�������ڽӵ㣬��0��ʼ��������һ��Ϊ1�ľ����ڽӵ�
+		{ 
+			return k; 
+		} 
+	} 
+	return -1; 
+}
+//������һ���ڽӶ��㣬û�еĻ�����-1 
+int NextAdjVex(Graph G, int i, int j) 
+{
+	int k; 
+	for (k = j + 1; k < G.vexnum; k++) 
+	{
+		if (G.arcs[i][k].adj == 1)//k��j+1��ʼ����һ��Ϊ1�ľ���������һ���ڽӵ� 
+		{
+			return k;
+		} 
+	} 
+	return -1; 
+}
+//���������·��
+void ShortestPath(Graph G,int a,int b)
+{
+	int u,v,w;
+	bool flag = false;//��flag�������˳�whileѭ�����жϣ���Ϊtrue���˳�while
+	LinkQueue Q;
+	for(v = 0; v < G.vexnum; ++v)
+	{
+		visited[v] = false; //�ȳ�ʼ�����ʱ�־����ΪFALSE
+	}
+	InitQueue(&Q);//��ʼ��һ�����У����洢�ѱ����ʵ�·������Ϊ1��2���������Ķ��㣬���洢���·���Ķ���
+	EnQueue(&Q,a);//��a�������
+	visited[a] = true;//������a,������ֵΪTRUE����ʾ�Ѿ�������
+	while (!QueueEmpty(Q))//���в�Ϊ��
+	{
+		DeQueue(&Q,&u);//�˺���������ʱ�����ƶ���ͷָ�룬��������ͷ����������ɾ��
+		for(w = FirstAdjVex(G,u);w >=0;w = NextAdjVex(G, u, w)) //wΪu���ڽӵ㣬ֱ��������bʱforѭ��ֹͣ
+		{
+			if(w == b)//��w=b����˵����С·���Ѿ��ҵ�
+			{
+				EnQueue(&Q,w);//�����һ�����������
+				PrintFoot(Q,a);
+				flag = true;
+			}
+			if(!visited[w])//��u���ڽӵ�û�б�����
+			{
+				EnQueue(&Q,w);
+				visited[w] = true;
+			}
+		}
+	
+		if(flag)
+		{
+			break;//����whileѭ��
+		}
+	}
+}
+
+//���·��
+Status PrintFoot(LinkQueue Q,int start)
+{
+	int foot[MAX_VERTEX_NUM];
+	int i;                  
+	QueuePtr p;
+	p = Q.rear;//p�Ƕ�β���
+	for(i=0;i < MAX_VERTEX_NUM; i++)
+	{
+		foot[i] = -1;//��ʼ��foot����
+	}
+	foot[0] = p->data;//·�������һ��
+	p = p->prious;
+	for(i = 1;p->data != start; i++)
+	{
+		foot[i] = p->data;
+		p = p->prious;
+	}
+	foot[i] = start;//foot[i] = p->data;
+	for(;i >= 0; i--)
+	{
+		if(foot[i] >= 0)
+			printf("%d ",foot[i] + 1);//���·��
+	}
+}
+
+//���������
+//��ʼ������
+Status InitQueue (LinkQueue *Q)
+{
+	Q->front = Q->rear = (QueuePtr)malloc(MAXQSIZE * sizeof(QNode)); 
+    if(!(Q->front))
+	{
+		return ERROR;
+	}
+	Q->front->next = Q->rear->next = NULL;
+	return OK;
+}
+//�ж��Ƿ�Ϊ�ն��� 
+bool QueueEmpty(LinkQueue Q) 
+{ 
+	if (Q.front == Q.rear) 
+	{ 
+		return true; 
+	} 
+	return false; 
+} 
+//����
+Status EnQueue(LinkQueue *Q,int e)
+{
+	QueuePtr p;
+	p = (QueuePtr)malloc(sizeof(QNode));//����priou���ָ��ָ��ոճ����еĽ�㣬����ǰ�Ķ�ͷָ����ָ���;
+	if(!p)
+	{
+		return ERROR;
+	}
+	p->data = e;
+	p->next = NULL;
+	p->prious = Q->front;//ָ��ǰ�Ķ�ͷָ����ָ���
+	Q->rear->next  = p;
+	Q->rear = p;
+	return OK;
+}
+//���� 
+Status DeQueue(LinkQueue *Q, int *e) 
+{ 
+	if (QueueEmpty(*Q)) 
+	{ 
+		return ERROR; 
+	} 
+	Q->front = Q->front->next; 
+	*e = Q->front->data; 
+	return OK; 
+}
+
+
+
+
+
+int main()
+{
+	int i,j;
+	Graph h ;
+	CreateGraph(&h);//����һ������ͼ�������ڽӾ����ʼ��ͼ
+
+	for(i = 0;i < 9; i++)
+	{
+		for(j = 0;j < 9;j++)
+		{
+			if(i != j)
+			{
+				printf("%d -> %d :",i+1,j+1);
+				ShortestPath(h,i,j);//Ѱ�����·��
+				printf("\n");
+			}
+		  }
+	}
+	return 0;
+}
+
diff --git "a/2017-1/HuanWoWeiLan/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.cpp" "b/2017-1/HuanWoWeiLan/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.cpp"
new file mode 100644
index 00000000..8bc74863
--- /dev/null
+++ "b/2017-1/HuanWoWeiLan/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.cpp"
@@ -0,0 +1,170 @@
+#include <stdio.h>
+#include <stdlib.h>
+typedef struct node
+{
+	int key;
+	struct node *lchild, *rchild;
+}BSTNode, *BSTree;
+
+//插入
+int InsertBST(BSTree *bst, int k)
+{
+	BSTree r, s, pre;
+	r = (BSTree)malloc(sizeof(BSTNode));
+	r->key = k;
+	r->lchild = NULL;
+	r->rchild = NULL;
+	if(*bst == NULL)
+	{
+		*bst = r;
+		return 1;
+	}
+	pre = NULL;
+	s = *bst;
+	while(s)
+	{
+		if(k == s->key)
+			return 0;
+		else if(k < s->key)
+		{
+			pre = s;
+			s = s->lchild;
+		}
+		else
+		{
+			pre = s;
+			s = s->rchild;
+		}
+	}
+	if(k < pre->key)
+		pre->lchild = r;
+	else
+		pre->rchild = r;
+	return 1;
+}   
+BSTree DeleteBST(BSTree T, int k)
+{
+	BSTree p, q, s, f;
+	p = T;
+	f = NULL;
+	while (p)
+	{
+		if(p->key == k)
+			break;
+		f = p;
+		if(p->key > k)
+			p =p->lchild;
+		else  if(p->key< k)
+			p =p->rchild;
+
+	}
+
+	q = p;
+
+	if ((p->lchild)&& (p->rchild))
+	{
+		s =p->lchild;
+		while(s->rchild)
+		{
+			q =s;
+			s =s->rchild;
+		}
+		p->key =s->key;
+		if (p != q)
+
+			q->rchild= s->lchild;
+
+		else  if (p == q)
+			q->lchild= s->lchild;
+		free(s);
+		return T;
+	}
+	else if (!p->lchild)
+
+		p =p->rchild;
+
+	else if (!p->rchild)
+		p =p->lchild;
+	if (!f)
+
+		T = p;
+
+	else if (q == f->lchild)
+		f->lchild= p;
+	else
+		f->rchild= p;
+
+	free(q);
+	return T;
+
+}
+
+void CreateBST(BSTree *bst)
+{
+	int key;
+	*bst = NULL;
+	scanf("%d", &key);
+	while(key != -1)
+	{
+		InsertBST(bst, key);
+		scanf("%d", &key);
+	}
+}
+/*打印二叉树:中序遍历*/
+void InOrder(BSTree root)
+{
+	if(root != NULL)
+	{
+		InOrder(root->lchild);
+		printf( "%d ", root->key);
+		InOrder(root->rchild);
+	}
+}
+
+/*搜索*/
+BSTree SearchBST(BSTree bst, int key)
+{
+	BSTree q;
+	q = bst;
+	//递归
+	while(q)
+	{
+		if(q->key == key)
+			return q;
+		if(q->key > key)
+			q=q->lchild;
+		else
+			q=q->rchild;
+	}
+	return NULL;                        //查找失败
+}
+
+int main()
+{
+	BSTree T;
+	int tag = 1;
+	int m, n;
+	printf("建立二叉排序树,请输入序列以-1结束:");
+	CreateBST(&T);
+	printf("中序遍历二叉树,序列为:");
+	InOrder(T);
+	while(tag != 0)
+	{
+		printf("请输入你要查找的元素:");
+		scanf("%d", &n);
+		if(SearchBST(T, n) == NULL)
+		{
+			printf("抱歉查找失败!");
+			InsertBST(&T, n);
+		}
+		else
+		{
+			printf("查找成功!查找的数字为%d\n", SearchBST(T,n)->key);
+			DeleteBST(SearchBST(T,n),n);
+		}
+		InOrder(T);
+		printf("\n是否继续查找 是 :请按 1 否则按 0:");
+		scanf("%d", &tag);
+	}
+	return 0;
+}