下面是算法竞赛入门经典上p107那道题目的dfs的实现(dfs()函数直接使用递归,dfsSTACK()使用的显式栈)
#include <stdio.h>
#include <string.h>
#define MAXN 100
int mat[MAXN][MAXN],vis[MAXN][MAXN];
char str[MAXN];
typedef struct{
int x;
int y;
}mypoint;
mypoint stack[MAXN];
//此版本的函数利用了显式栈,防止图比较大的时候dfs那个版本可能出现的栈溢出
void dfsSTACK(int x,int y)
{
int top=0,tempx,tempy;
mypoint temp={x,y};
stack[0]=temp;
while(top>=0)
{
tempx=stack[top].x;
tempy=stack[top].y;
top--;
if(!mat[tempx][tempy] || vis[tempx][tempy]==1)//如果是白色格子或者此格子已经被访问过
continue;
vis[tempx][tempy]=1;
top++;
stack[top].x=tempx-1;
stack[top].y=tempy-1;
top++;
stack[top].x=tempx-1;
stack[top].y=tempy;
top++;
stack[top].x=tempx-1;
stack[top].y=tempy+1;
top++;
stack[top].x=tempx;
stack[top].y=tempy-1;
top++;
stack[top].x=tempx;