void bfs_iterative(LGraph graph, Vertex start, void (*func)(nodeptr p))
{
    int visited[graph->vertex_num];
    Queue queue = CreateQueue(graph->vertex_num);
    nodeptr curr;
    curr = graph->G[start];
    visited[curr->adjv] = 1;
    enqueue(queue, curr);
    
    while (!QIsEmpty(queue))
    {        
        while (curr)
        {
            if (visited[curr->adjv] != 1)
            {
                enqueue(queue, curr);
                visited[curr->adjv] = 1;
            }
                
            else
                curr = curr->next;
        }
        nodeptr temp = dequeue(queue);
        curr = graph->G[temp->adjv];
        (*func)(curr);
    }
}
Ejemplo n.º 2
0
char DeQueue(char *q,int n,int &f)
{
	char x;
	if(QIsEmpty(q,f))
		return NULL;
	x = q[f];
	q[f] = NULL;
	f++;
	if(f == n)
		f = 0;
	return x;
}
Ejemplo n.º 3
0
void bfs_iterative(MGraph graph, Vertex start, void (*func)(int p))
{
    int visited[graph->vertex_num];
    Queue queue = CreateQueue(graph->vertex_num);
    int curr;
    curr = start; // 
    visited[curr] = 1;
    enqueue(queue, curr);
    
    while (!QIsEmpty(queue))
    {        
        for (int i = 0; i < graph->vertex_num; i++)
            if ((graph->G[curr][i] == 1) && (visited[i] != 1))
            {
                enqueue(queue, i);
                visited[i];
            }
        curr = dequeue(queue);
        (*func)(curr);
    }
}
Ejemplo n.º 4
0
int main(void)
{
	int i,j;
	int N,M;
	int x_cur = 0, y_cur = 0;
	int result = 0 ;
	int length = 1;
	Queue q;
	Data dequeData;
	QueueInit(&q);

//입력을 받는다
	scanf("%d %d",&N,&M);
	
 
	for(j=0; j<N; j++)
	{
		for(i=0; i<M; i++)
		{
			scanf("%d",&data[i][j].value);
			data[i][j].use = 0;
		}
	}

	//printf("test value %d\n",data[1][1].value);
	data[0][0].x_cur = 0;
	data[0][0].y_cur = 0; 
	data[0][0].length = length;
	Enqueue(&q,&data[0][0]);

	while(!QIsEmpty(&q))
	{
			//printf("deque\n");
			//printf("data[0][0] : %d %d\n",data[0][0].x_cur,data[0][0].y_cur);
			
			dequeData = Dequeue(&q);
			data[dequeData.x_cur][dequeData.y_cur].use = 1;
			//printf("x_cur : %d y_cur : %d\n", dequeData.x_cur, dequeData.y_cur);
			//printf("dequeData.value %d\n",dequeData.value);		
			if((data[dequeData.x_cur][dequeData.y_cur].value == 1 ))
			{
		
				if((dequeData.x_cur+1 < M)&& (data[dequeData.x_cur+1][dequeData.y_cur].use == 0))
				{
					//printf("x_cur +1 enqueue\n");
					data[dequeData.x_cur+1][dequeData.y_cur].length = dequeData.length + 1 ;
					data[dequeData.x_cur+1][dequeData.y_cur].x_cur = dequeData.x_cur + 1;  
					data[dequeData.x_cur+1][dequeData.y_cur].y_cur = dequeData.y_cur;
					Enqueue(&q,&data[dequeData.x_cur+1][dequeData.y_cur]);		
				}
				if((dequeData.y_cur+1 < N)&& (data[dequeData.x_cur][dequeData.y_cur+1].use == 0))
				{
					//printf("y_cur +1 enqueue\n");
					data[dequeData.x_cur][dequeData.y_cur+1].length = dequeData.length + 1 ;
					data[dequeData.x_cur][dequeData.y_cur+1].x_cur = dequeData.x_cur;
					data[dequeData.x_cur][dequeData.y_cur+1].y_cur = dequeData.y_cur + 1;
					Enqueue(&q,&data[dequeData.x_cur][dequeData.y_cur+1]);		
				}
				if((0 <= dequeData.x_cur-1)&& (data[dequeData.x_cur-1][dequeData.y_cur].use == 0))
				{
					//printf("x_cur -1 enqueue\n");
					data[dequeData.x_cur-1][dequeData.y_cur].length = dequeData.length + 1 ;
					data[dequeData.x_cur-1][dequeData.y_cur].x_cur = dequeData.x_cur - 1;  
					data[dequeData.x_cur-1][dequeData.y_cur].y_cur = dequeData.y_cur;
					Enqueue(&q,&data[dequeData.x_cur-1][dequeData.y_cur]);				
				}
				if((0 <= dequeData.y_cur-1) && (data[dequeData.x_cur][dequeData.y_cur-1].use == 0))
				{
					//printf("y_cur -1 enqueue\n");
					data[dequeData.x_cur][dequeData.y_cur-1].length = dequeData.length + 1 ;
					data[dequeData.x_cur][dequeData.y_cur-1].x_cur = dequeData.x_cur;  
					data[dequeData.x_cur][dequeData.y_cur-1].y_cur = dequeData.y_cur-1;
					Enqueue(&q,&data[dequeData.x_cur][dequeData.y_cur-1]);				
				}
			}
			
	}


	printf("%d\n",data[M-1][N-1].length);
							
	return 0;
}