交互式程序,要用到一个函数fflush,它的作用是对标准输出流的清理,对stdout来说是及时地打印数据到屏幕上,一个事实:标准输出是以『行』为单位进行的,也即碰到 才打印数据到屏幕。这就可能造成延时。在Windows平台上是看不出来的,它被改成及时生效了。而fflush对stdin的作用是清除冗余输入。
#include<cstdio> const int maxn = 123; //要AC const int maxlen = 42; bool vis[maxn][maxn]; char dir[4][maxlen] = {"NORTH","EAST","SOUTH","WEST"}; char done[] = "DONE"; int dx[] = {0,1,0,-1} , dy[] = {1,0,-1,0}; char response[maxlen]; bool Move(int d) { puts(dir[d]); fflush(stdout); gets(response); return *response == 'E'; } void dfs(int x,int y) { vis[x][y] = true; for(int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; if(!vis[nx][ny] && Move(i)) dfs(nx,ny),Move((i+2)%4); else vis[nx][ny] = true; } } int main() { int x = 42, y = 42; dfs(x,y); puts(done); fflush(stdout); return 0; }