Professional Documents
Culture Documents
Ass 3.c
Ass 3.c
Ass 3.c
h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_ROW 9
#define MAX_COLUMN 9
#define MAX 30
// Data
int data[9][9] = {
{1,0,0,0,1,0,1,1,0},
{1,1,0,1,1,1,0,0,1},
{0,1,0,1,1,0,1,0,1},
{0,1,1,0,0,1,0,1,1},
{0,0,1,0,1,0,1,0,0},
{1,1,1,0,0,0,0,1,1},
{1,0,1,1,1,1,1,0,0},
{1,1,1,0,0,0,1,0,1},
{0,0,0,1,1,1,1,1,0}
};
// Set up Queue
typedef struct
{
point_t data[MAX];
int front;
int rear;
}Queue;
q->front = 0;
q->rear = -1;
q->front = 0;
q->rear = q->rear + 1;
q->data[q->rear] = x;
}
}
return d;
}
return ret;
}
// Tim cac diem xung quanh cua diem duoc xet nam tren duong di tu diem nguon O(0,0)
den diem dich co gia tri bang 1
void findSurroundingPoint(int x, int y, point_t surroundingPnt[4], int* count)
{
// Khoi tao so bien dem so luong cac nut co the di duoc quanh 1 vi tri
int tempCnt = 0;
// Kiem tra xem vi tri diem ben phai co den duoc khong
if ((checkCoordinate(x, y+1) == true) && (matrix[x][y+1].value == 1))
{
surroundingPnt[tempCnt] = matrix[x][y+1];
tempCnt++;
}
// Kiem tra xem vi tri diem ben duoi co den duoc khong
if ((checkCoordinate(x+1, y) == true) && (matrix[x+1][y].value == 1))
{
surroundingPnt[tempCnt] = matrix[x+1][y];
tempCnt++;
}
// Kiem tra xem vi tri diem ben trai co den duoc khong
if ((checkCoordinate(x, y-1) == true) && (matrix[x][y-1].value == 1))
{
surroundingPnt[tempCnt] = matrix[x][y-1];
tempCnt++;
}
// Kiem tra xem vi tri diem ben tren co den duoc khong
if ((checkCoordinate(x-1, y) == true) && (matrix[x-1][y].value == 1))
{
surroundingPnt[tempCnt] = matrix[x-1][y];
tempCnt++;
}
*count = tempCnt;
}
findSurroundingPoint(p.row,p.column,pp,&count);
// Tim kiem cac diem xung quanh
int i = 0;
for( i=0 ; i<count ; i++) //
Vong lap for tim kiem diem moi
{
if(pp[i].visited == false)
// Neu tim duoc diem chua di qua
{
matrix[pp[i].row][pp[i].column].visited = true;
// Ghi nhan diem do da di qua
matrix[pp[i].row][pp[i].column].prev = &matrix[p.row][p.column];
// Con tro chi vao diem moi
printf("(%d,%d) ",pp[i].row,pp[i].column);
if(pp[i].row == x && pp[i].column == y)
// Neu duyet den diem cuoi thi dung
{
found = true;
// Neu tim duoc diem dich A thi dung
break;
// Thoat ra khoi vong lap
}
else
{ // Neu
khong phai vay (chua tim duoc diem dich)
enQueue(&queue,pp[i]);
// Tiep tuc cho diem moi vao hang doi
}
}
}
}
if(found ==
true) // Neu tim duoc
diem dich
{
printPath(x,y);
// In ra toa do cac diem tren duong di
}
else{ // Neu
khong tim duoc diem dich
printf("Khong tim duoc duong di tu o xuat phat O den o dich den A.");
// In ra "Khong tim duoc"
}
}
// Ham in ra ma tran
void printMatrix()
{
printf("CHUONG TRINH TIM DUONG DI NGAN NHAT TU O(0,0) DEN A(dong, cot): \n");
printf("\nMa tran 9x9 bieu dien cho mat phang 2 chieu: \n");
int i, j = 0;
for( i=0 ; i<MAX_ROW ; i++)
{
for( j=0; j<MAX_COLUMN; j++)
{
printf(" %d",data[i][j]);
matrix[i][j].value = data[i][j];
matrix[i][j].column = j;
matrix[i][j].row = i;
matrix[i][j].visited = false;
}
printf("\n");
}
}
int main()
{
printMatrix();
int x=0 , y=0;
printf("\nToa do cua o xuat phat la O(0,0).\n");
findShortestPath(x,y);
return 0;
}