搜索:zoj 2100 Seeding—FS)
【转】http://blog.csdn.net/zxy_snow/article/details/5941464
#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;int visit[8][8];int n,m,ok;int dir[8] = {1,0,-1,0,0,1,0,-1};void input(){ char x; ok = 0; for(int i=1; i<=n; i++) { for(int k=1; k<=m; k++) { scanf("%c",&x); switch(x) { case '.': visit[i][k] = 0; break; case 'S': visit[i][k] = 1; break; } } getchar(); }}int traverse(){ for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) if( !visit[i][j] ) return 0; return 1;}void DFS(int i,int j){ visit[i][j] = 1; if( traverse() ) { ok = 1; return ; } for(int k=0; k<8; k+=2) { int a = i + dir[k]; int b = j + dir[k+1]; if( a>=1 && a<=n && b>=1 && b<=m && !visit[a][b] ) DFS(a,b); } if( !ok ) visit[i][j] = 0; return ;}int main(void){ while( scanf("%d %d",&n,&m)!=EOF && n) { getchar(); input(); DFS(1,1); ok == 1 ? printf("YES/n") : printf("NO/n"); }return 0;}
?