Escolar Documentos
Profissional Documentos
Cultura Documentos
h>
#include<malloc.h>
#include<string.h>
#define N 100
struct Node
int fval;
int id;
int g;
};
int i,n,size=0,closedsize=0,opensize=0;
while((minHeap[i/2]->fval)>val)
swap(i,i/2);
i/=2;
printf("\nsize= %d :",size);
insrtnode->id=s_id;
insrtnode->fval=s_f;
insrtnode->g=s_g;
minHeap[size]=insrtnode;
size=size+1;
printf("\n heap elemts before heapify are :");
for(i=0;i<size;i++)
adjustpos(size-1,s_f);
for(i=0;i<size;i++)
printf(" %d ",minHeap[i]->id);
swap(int a, int b)
int t1=minHeap[a]->id;
int t2=minHeap[a]->g;
int t3=minHeap[a]->fval;
minHeap[a]->id=minHeap[b]->id;
minHeap[a]->g=minHeap[b]->g;
minHeap[a]->fval=minHeap[b]->fval;
minHeap[b]->id=t1;
minHeap[b]->g=t2;
minHeap[b]->fval=t3;
printpath(int parent[n],int i) {
if(parent[i]!=-1) printpath(parent,parent[i]);
printf("->%d ",i);
void heapify(int i)
{
int smallest = i; // Initialize smallest as root
smallest = l;
smallest = r;
if (smallest != i)
swap(i, smallest);
heapify(smallest);
minHeap[0]=minHeap[size-1];
size--;
heapify(0);
return min;
int parent[n];
int j;
for(i=0;i<n;i++) parent[i]=-1;
struct Node* strtnode=(struct Node*)malloc(sizeof(struct Node*));
strtnode->id=st;
strtnode->fval=h[0];
strtnode->g=0;
insertHeap(0,0,10);
while(size!=0)
current=extractmin();
int curr_id=current->id;
int curr_g=current->g;
if(current->id==goal)
printpath(parent,current->id);
return;
for(j=0;j<n;j++)
printf("\n ");
if ( adjMat[curr_id][j]!=0 )
printf("\ngfdf,");
printf("\n current gval for id: %d , is %d(gval) ",curr_id,curr_g);
int s_id=j;
int s_g=curr_g+adjMat[curr_id][s_id];
int s_f=s_g+h[s_id];
if(parent[s_id]==-1)
parent[s_id]=curr_id;
insertHeap(s_id,s_g,s_f);
printf("\n%d inserted",s_id);
closedList[closedsize++]=current;
int main() {
scanf("%d",&n);
int adjMat[n][n];
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
scanf("%d",&adjMat[x][y]);
int h[n];
for(x=0;x<n;x++)
scanf("%d",&h[x]);
int st,goal;
scanf("%d",&st);
scanf("%d",&goal);
// an example input
/* int size=0;
n=8;
int
adjMat[8][8]={{0,1,2,0,0,0,0,0},{0,0,0,0,0,4,7,0},{0,0,0,7,1,0,0,0},{0,0,0,0,0,0,0,5},{0,0,0,0,0,0,0,12},{0,
0,0,0,0,0,0,2},{0,0,0,0,0,0,0,3},{0,0,0,0,0,0,0,0}};
int h[8]={10,5,6,4,15,5,8,0};
int st=0,goal=7;*/
a_star(st,goal,adjMat,h);
return 0;