⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 是C++的基础
💻 C
字号:
#include "ECStack.h"
#include "MazeQ.h"
#include "Global.h"
#include "Ulti.h"
#include "MyAssert.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*input file specification:*/
/*inputData.txt
	startX,startY,endX,endY;//follow C Array law,start index is 0
  
  mazeInfo.txt
	rowNum,colNum.
	a01,a02 ...
	... ... ...
	... ... ann
*/

char *inFileName="inputData.txt";
char *outFileName="outputData.txt";
#define DEBUG 1

void main(int argc,char* argv[])
{
	FILE* inputFile;/*input file*/
	FILE* outputFile;/*output file*/
//	FILE* mazeFile;
	double startTime,endTime,tweenTime;/*time callopsed info*/
	
	//maze info.
	int** mazeArr;
	int rowNum,colNum;
	
	//Ulti object
	PSeqStack StackX,StackY;//StackDir;
	
	//search wArr
	struct searchNode** searchWArr;
	
	//flags.
	int flag;
	
	//startNode,endNode,
	int startX,startY,endX,endY;
	int curX,curY;//curDir;
	int tmpX,tmpY;
	
	int** ansArr;

	int i,j;/*iterator index*/

	/*input file open*/
	if(argc>1)strcpy(inFileName,argv[1]);
	assertF((inputFile=fopen(inFileName,"rb"))!=NULL,"input file error");
	printf("input file open success\n");
	
	/*outpout file open*/
	if(argc>2)strcpy(outFileName,argv[2]);
	assertF((outputFile=fopen(outFileName,"wb"))!=NULL,"output file error");
	printf("output file open success\n");
		
	/*data input*/
	read2DArrInt(&mazeArr,&rowNum,&colNum,"mazeInfo.txt");
	fscanf(inputFile,"%d,%d,%d,%d;",&startX,&startY,&endX,&endY);
	
	//mem apply
	searchWArr=(struct searchNode**)malloc(sizeof(struct searchNode*)*rowNum);
		for(i=0;i<rowNum;i++)
			searchWArr[i]=(struct searchNode*)malloc(sizeof(struct searchNode)*colNum);
	twoDArrMemApply(&ansArr,rowNum,colNum);

	StackX=createNullSeqStack();
	StackY=createNullSeqStack();
	//StackDir=createNullSeqStack();
	
	//data init
	for(i=0;i<rowNum;i++)
		for(j=0;j<colNum;j++)
		{
			searchWArr[i][j].mDir=UNSEARCHED;
			searchWArr[i][j].visited=0;
			ansArr[i][j]=-1;
		}

		
#if  DEBUG
	printf("\n*******start of test program******\n");
	printf("now is runnig,please wait...\n");
	startTime=(double)clock()/(double)CLOCKS_PER_SEC;
	/******************Core program code*************/
		curX=startX,curY=startY;
		flag=1;
		if(curX==endX&&curY==endY)
		{
				seqPush(StackX,curX);
				seqPush(StackY,curY);
		}
		else
		{
			while(!(curX==startX&&curY==startY&&!flag))
			{
			flag=0;
			//if(!searchWArr[curX][curY]->visited)
			//{
				if(!searchWArr[curX][curY].visited)
					searchWArr[curX][curY].visited=1;
				
				while(searchWArr[curX][curY].mDir+1!=SEARCHED)
				{
					searchWArr[curX][curY].mDir++;//find next direction
					//EAST,SOUTH,WEST,NORTH,SEARCHED
					switch(searchWArr[curX][curY].mDir)
					{
						case EAST:tmpX=0;tmpY=1;printf("e\n");
							break;
						case SOUTH:tmpX=1;tmpY=0;printf("s\n");
							break;
						case WEST:tmpX=0;tmpY=-1;printf("w\n");
							break;
						case NORTH:tmpX=-1;tmpY=0;printf("n\n");
							break;
						default:
							printf("error dir search\n");
					}
					if(mazeArr[curX+tmpX][curY+tmpY]==WALKABLE&&!searchWArr[curX+tmpX][curY+tmpY].visited)
					{
						printf("(%d,%d)\n",curX,curY);
						seqPush(StackX,curX);
						seqPush(StackY,curY);
					//	seqPush(StackDir,searchWArr[curX][curY]->mDir);
						curX+=tmpX;
						curY+=tmpY;
						flag=1;
						break;
					}
				}
			//}
			
			if(flag&&curX==endX&&curY==endY)
			{
				printf("target founded\n");
				break;
			}
			
			if(flag==0&&!(curX==startX&&curY==startY))
			{
				curX=seqPop(StackX);
				curY=seqPop(StackY);
				//curDir=seqPop(StackDir);
			}
			}
		}
		
		if(flag)
		{
			while(!isNullSeqStack(StackX)&&!isNullSeqStack(StackY))
			{
				tmpX=seqPop(StackX);
				tmpY=seqPop(StackY);
				//fprintf(outputFile,"(%d,%d)->",tmpX,tmpY);
				ansArr[tmpX][tmpY]=1;
			}
			fprintf(outputFile,"path founded:\r\n");
			ansArr[endX][endY]=1;//because the target node was not push into the stacks.
			for(i=0;i<rowNum;i++)
			{
				for(j=0;j<colNum;j++)
					if(ansArr[i][j]==1)fprintf(outputFile,"o ");
					else fprintf(outputFile,"* ");
				fprintf(outputFile,"\r\n");
			}
		}
		else
		{
			fprintf(outputFile,"no way lead to the target node\r\n");
		}
	/******************End of Core program**********/
	endTime=(double)clock()/(double)CLOCKS_PER_SEC;
	tweenTime=endTime-startTime;/*Get the time collapsed*/
	/*Time collapsed output*/
	printf("the collapsed time in this algorithm implement is:%f\n",tweenTime);
	fprintf(outputFile,"the collapsed time in this algorithm implement is:%f\r\n",tweenTime);	
	printf("\n*******end of test program******\n");
#endif
	twoDArrMemFree(&ansArr,rowNum);

	printf("program end successfully,\n you have to preess any key to clean the buffer area to output,otherwise,you wiil not get the total answer.\n");
	getchar();/*Screen Delay Control*/
	return;
}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -