轩冰舞蝶 轩冰舞蝶
一个阳光帅气满腹经纶的男孩子……
关注数: 27 粉丝数: 41 发帖数: 949 关注贴吧数: 274
做课设呢,有一个小问题不会,请教请教! 怎么把下面程序在屏幕上输出的内容保存到文件中,我试了好多,不行啊! //贪心法 #include <iostream> using namespace std; struct info { int x,y,out; struct info* pnext; }; struct info* phead=NULL; const int dx[8]={-2,-2,-1,-1, 1, 1, 2, 2}; const int dy[8]={-1, 1,-2, 2,-2, 2,-1, 1}; const int R=8,C=8; int board[R][C]; int outlet(int x,int y) { int ct=0; for(int i=0;i<8;++i) if(x+dx[i]<0||y+dy[i]<0||x+dx[i]>=R||y+dy[i]>=C||board[x+dx[i]][y+dy[i]]) continue; else ++ct; return ct; }//计算(x,y)的出口数 void sort(info *p,int n) { for(int i=n-1;i>0;--i) if(p[i].out<p[i-1].out) swap(p[i],p[i-1]); else break; }//按出口数由小到大排序 bool search(int x,int y,int step) { if(board[x][y]) return false; if(step==R*C) { board[x][y]=step; return true; } else { board[x][y]=step; int i,j; info dir[8]; for(i=j=0;i<8;++i) if(x+dx[i]<0||y+dy[i]<0||x+dx[i]>=R||y+dy[i]>=C||board[x+dx[i]][y+dy[i]]) continue; else { dir[j].x=x+dx[i];dir[j].y=y+dy[i]; dir[j].out=outlet(dir[j].x,dir[j].y); sort(dir,++j); } for(i=0;i<j;++i) if(search(dir[i].x,dir[i].y,step+1)) return true; board[x][y]=0; return false; } }//求解 void file(struct info* phead) { FILE *fp; int x=1,y=1; if((fp=fopen("G:\\Course\\12240110\\JumpHorse\\RunResult\\RunResult.txt","w+"))==NULL) { printf("打开文件失败!\n"); exit(1); } int index=1; while(phead!=NULL) { //fwrite(phead,sizeof(struct info),1,fp); fprintf(fp,"%d",1); //fwrite(fp,"%d%d",board[x][y]); index++; phead=phead->pnext; } fclose(fp); printf("成功保存信息至G:\\Course\\12240110\\JumpHorse\\RunResult\\RunResult.txt\n"); } int main() { int i,j,m,n; for(i=0;i<R;++i) for(j=0;j<C;++j) { memset(board,0,R*C*sizeof(int)); if(search(i,j,1)) { printf("start at(%d,%d):\n",i+1,j+1); for(m=0;m<R;++m) { for(n=0;n<C;++n) printf("%4d",board[m][n]); printf("\n\n"); } } else printf("start at(%d,%d) has no solve!\n",i+1,j+1); } file(phead); system("pause"); return 0; }
1 下一页