| 查看: 1521 | 回复: 8 | ||
[求助]
关于C++中结果输出的问题 已有2人参与
|
|
各位大侠,我有一段程序代码可运行,但是结果就是一个黑色框中一闪而过!我希望把这一过程数据反应到一个文档中,怎么样才可以做到呢?谢谢 如下程序: #include <iostream> using namespace std; struct Node{ char a[3][3]; //表示状态的数组 Node * pFather; //指向节点的父节点 Node * pNext; //用于建立链表 int i0; //节点中'0'的位置x坐标 int j0; //节点中'0'的位置y坐标 }; struct List { Node * Head; //队列头指针 Node * Tail; //队列尾指针 }; //初始化List //参数:指向list的指针 //返回值:无 void InitList(List * pList) { pList->Head = NULL; pList->Tail = NULL; } //将一个节点pNode入队 //参数:队列指针pList;节点指针pNode //返回值:无 void InList(List * pList,Node * pNode){ if (!pList->Head) { pList->Head = pNode; pList->Tail = pNode; } else { pList->Tail->pNext = pNode; pList->Tail = pNode; } } //将队列的第一个节点出队 //参数:队列指针pList //返回值:队列为空,返回NULL;队列不为空,指向出队节点指针 Node * OutList(List * pList){ Node * temp=NULL; if (!pList->Head) { return NULL; } else { temp = pList->Head; if(pList->Head == pList->Tail) //只有一个节点 { pList->Head = NULL; pList->Tail = NULL; } else { pList->Head =temp->pNext; //不止一个节点 } return temp; } } //判断两个节点的状态是否一致 //参数:两个指向节点的指针pNode1、pNode2 //返回值:一致true;不一致false bool IsEqual(Node * pNode1,Node * pNode2) { if(!pNode1 || !pNode2){ return true; } for(int i = 0;i < 3;i++) { for (int j = 0;j < 3;j++) { if(!pNode1->a || !pNode2->a) { return true; } if (pNode1->a[j] != pNode2->a[j]) { return false; } } } return true; } //拷贝一个节点的状态到新的节点 //参数:Node的指针:pNew,pOld //返回值:无 void CopyNode(Node * pNew,Node * pOld) { for(int i = 0;i < 3;i++) { for (int j = 0;j < 3;j++) { pNew->a[j] = pOld->a[j]; } } } //给定一个节点,扩展出该节点的所有子节点,返回一个保存所有节点的List //参数;指向指针节点的指针 //返回值:List指针 List * ExpandSub(Node * pNode){ //保存移动后,'0'元素的位置坐标 int i = 0; int j = 0; //声明保存所有节点的List List * pSubList; pSubList = new List; InitList(pSubList); for (int iAdd = -1;iAdd <= 1;iAdd++) { for (int jAdd = -1;jAdd <= 1;jAdd++) { //排除增量(-1,-1)、(-1,1)、(0,0)、(1,-1)、(1,1) if(iAdd == 0 &&jAdd == 0) { continue; } if(iAdd != 0 &&jAdd != 0) { continue; } //计算移动后的'0'元素的位置坐标 i = pNode->i0 + iAdd; j = pNode->j0 + jAdd; //排除数组越界情况 if (i < 0 || j < 0 || i > 2 || j > 2) { continue; } //子节点指针 Node * pSub; pSub = new Node; //初始化子节点 pSub->i0 = i; pSub->j0 = j; pSub->pFather = pNode; pSub->pNext = NULL; CopyNode(pSub,pNode); pSub->a[pNode->i0][pNode->j0] = pSub->a[j]; pSub->a[j] = '0'; //子节点入队 InList(pSubList,pSub); } } return pSubList; } //打印某个节点 //参数:节点指针 //返回值:无 void printNode(Node * pNode) { cout<<"-----------------\n"; for(int i = 0;i < 3;i++) { for (int j = 0;j < 3;j++) { cout<<pNode->a[j]<<"\t"; } cout<<endl; } cout<<"-----------------\n"; } //打印结果 //参数:Node指针 //返回值:无 void printPath(Node * pResult) { Node * temp; temp = pResult; while (temp) { printNode(temp); temp = temp->pFather; } } //搜索某个List中是否出现和节点pNode状态一致的节点 //参数:Node指针,节点指针pNode //返回值:出现true,没有出现false bool IsAppeared(Node * pStart,Node * pNode) { Node * temp ; temp = pStart; while (temp) { if(IsEqual(temp,pNode)) { return true; } temp = temp->pNext; } return false; } //子节点入队 //参数:Node * pStart,List * ,Node *; //返回值: 无 void SubNodeInList(Node * pStart,List * list,Node * pOut) { Node * temp; Node * temp1; //保存子节点队列 List * pSubList = NULL; pSubList = new List; InitList(pSubList); pSubList = ExpandSub(pOut); temp = OutList(pSubList);//取子节点 while (temp) { if(IsAppeared(pStart,temp)) { temp1 = temp; temp = temp->pNext; delete temp1; } else { Node * tempSwap =NULL; tempSwap = new Node; CopyNode(tempSwap,temp); tempSwap->i0 = temp->i0; tempSwap->j0 = temp->j0; tempSwap->pFather = temp->pFather; tempSwap->pNext = NULL; InList(list,tempSwap); temp = temp->pNext; } } } //搜索函数 //参数:原始节点指针pSrc,目的节点指针pDes //无结果,返回NULL;有结果,返回保存路径的List指针 Node * Search(Node * pSrc,Node * pDes) { //保存队列头节点 Node * pStart = pSrc; //用来保存结果 Node * pResult = NULL; //用来遍历 List * list = NULL; list = new List; InitList(list); //入队 InList(list,pSrc); int i = 1; bool flagxx = false; Node * pOut = NULL; pOut = OutList(list); Node * s; while (pOut) { SubNodeInList(pStart,list,pOut); pOut = OutList(list); if(!flagxx) { pSrc->pNext=pOut; flagxx = true; } s = pStart; while(s) { if(IsEqual(s,pDes)) { pResult = s; return pResult; } s=s->pNext; } //cout<<"\n\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n\n"; } return NULL; } int main() { Node temp = {{{'1','2','3'},{'4','0','6'},{'7','5','8'}},NULL,NULL,1,1}; //原始状态 //指向原始状态的指针 Node * pSrc; pSrc = &temp; Node TEMP = {{{'1','2','3'},{'4','5','6'},{'7','8','0'}},NULL,NULL,2,2}; //目的状态z //指向目的状态的指针 Node * pDes; pDes = &TEMP; Node * pResult = NULL; pResult = Search(pSrc,pDes); if (!pResult) { cout<<"问题无解!"; } else { printPath(pResult); } /*测试函数List * ExpandSub(Node * pNode) List * p; p = new List; InitList(p); p = ExpandSub(pSrc); printList(p); */ system("pause" ;return 0; } [ Last edited by hsfang on 2014-3-18 at 17:01 ] |
» 猜你喜欢
求个博导看看
已经有17人回复
青基代表作,AAAI之类的A会的special track在国内认可度高吗?还是归为workshop之流?
已经有3人回复
上海工程技术大学【激光智能制造】课题组招收硕士
已经有6人回复
带资进组求博导收留
已经有11人回复
自荐读博
已经有5人回复
上海工程技术大学张培磊教授团队招收博士生
已经有4人回复
求助院士们,这个如何合成呀
已经有4人回复
临港实验室与上科大联培博士招生1名
已经有9人回复
写了一篇“相变储能技术在冷库中应用”的论文,论文内容以实验为主,投什么期刊合适?
已经有6人回复
最近几年招的学生写论文不引自己组发的文章
已经有11人回复
» 本主题相关价值贴推荐,对您同样有帮助:
gaussview中看到输出结果的能量是什么能量
已经有3人回复
Fortran输出二进制数据,用matlab读出,结果出错,求助问题何在?
已经有4人回复
如何看激发态的输出结果?
已经有3人回复
fortran程序运行结果输出及绘图
已经有9人回复
OE中了,结果。。。
已经有10人回复
为什么这个程序无法输出结果呢?
已经有9人回复
怎么把C++处理的数据结果转化到文本txt中?
已经有5人回复
FFT变换,是否能输出想要的某个频率结果?
已经有12人回复
C++里如何保证汉字和字符一起输出时宽度相等?
已经有4人回复
在FORTRAN中嵌套APDL
已经有10人回复
我编的Simpson积分法fortran程序给不出结果,大侠们看看哪里出了问题?
已经有4人回复
NBO计算输出结果中的各个结构片段是怎样确定的?
已经有20人回复
Fortran的格式化输入输出问题
已经有14人回复
关于c++中计算结果出现-1.#IND的问题
已经有4人回复
【求助】求助fluent结果输出?
已经有10人回复
【求助】NBO输出结果中的Natural charge分析
已经有7人回复
【求助】dev c++编译结束,运行后怎么样输出结果?
已经有6人回复
【求助】Fortran的计算结果
已经有11人回复
【求助】matlab中如何将程序的结果输出到一个文件中
已经有11人回复
liqizuiyang
木虫 (著名写手)
- 应助: 59 (初中生)
- 金币: 6859.5
- 散金: 261
- 红花: 94
- 帖子: 2093
- 在线: 708.9小时
- 虫号: 2366686
- 注册: 2013-03-21
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
2楼2014-03-18 19:18:29
3楼2014-03-19 11:01:52
4楼2014-03-21 15:19:35
5楼2014-03-21 15:20:37
6楼2014-03-22 09:32:26
7楼2014-03-22 09:33:42
8楼2014-03-22 09:46:19
9楼2014-03-22 11:28:52







;
回复此楼