北大校赛2011 Word Ladder(C题) 解题报告
来源:互联网 发布:闲鱼可以淘宝介入吗 编辑:程序博客网 时间:2024/06/06 16:48
套用模板,进行广搜。
#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;#define INFINITY 0#define MAX_VERTEX_NUM 6001 //顶点最多个数#define LENGTH 20 //顶点字符长度//*********************************邻接表***********************************begintypedef char VertexType[LENGTH];typedef struct ArcNode{ int adjvex; struct ArcNode* nextarc; int weight;}ArcNode;typedef struct VNode{ VertexType data; ArcNode *firstarc;}VNode, AdjList[MAX_VERTEX_NUM];typedef struct{ AdjList vertices; int vexnum; int arcnum;}ALGraph;int Judge(char *s1,char *s2){int n1=strlen(s1);int n2=strlen(s2);if(n1!=n2) return 0;int count=0;for(int i=0;i<n1;i++){if(s1[i]!=s2[i]) count++;}return count==1 ? 1 : 0;}int LocateVex(const ALGraph & g, char name[LENGTH]){ for (int i = 0; i < g.vexnum; i++) if (0 == strcmp(g.vertices[i].data, name)) return i; return -1;}//图的建造void CreateGraph(ALGraph &g){ int i=0;while(cin>>g.vertices[i].data){ g.vertices[i].firstarc = NULL; i++; } g.vexnum=i; ArcNode *p, *q; ArcNode *pTmp; g.arcnum=0; for (int i = 0; i < g.vexnum; i++){ for(int j = i+1;j < g.vexnum;j++){ if(Judge(g.vertices[i].data,g.vertices[j].data)){ g.arcnum++; int x = i; int y = j; p = new ArcNode; q = new ArcNode; p->adjvex = y; p->nextarc = NULL; p->weight = 1; q->adjvex = x; q->nextarc = NULL; q->weight = 1; if (NULL == g.vertices[x].firstarc) g.vertices[x].firstarc = p; else{ for (pTmp = g.vertices[x].firstarc; NULL != pTmp->nextarc; pTmp = pTmp->nextarc); pTmp->nextarc = p; } if (NULL == g.vertices[y].firstarc) g.vertices[y].firstarc = q; else{ for (pTmp = g.vertices[y].firstarc; NULL != pTmp->nextarc; pTmp = pTmp->nextarc); pTmp->nextarc = q; } } } }}//v的第一个邻接点int FirstAdjVex(const ALGraph &g, int v){ if ( NULL != g.vertices[v].firstarc) return g.vertices[v].firstarc->adjvex; return -1;}//v相对于w的下一个邻接点int NextAdjVex(const ALGraph &g, int v, int w){ ArcNode *p; for (p = g.vertices[v].firstarc; NULL != p; p = p->nextarc) if (p->adjvex == w && p->nextarc != NULL) return p->nextarc->adjvex; return -1;}//*********************************邻接表***********************************endbool visit[MAX_VERTEX_NUM];//广度优先遍历int pre[MAX_VERTEX_NUM];void BFSTraverse(ALGraph &g, char vName1[LENGTH],char vName2[LENGTH]){memset(pre,-1,sizeof(pre)); int pos = LocateVex(g, vName1); for (int v = 0; v < g.vexnum; v++) visit[v] = false; queue<int> q; if (!visit[pos]){ pre[pos]=-1;//cout<<g.vertices[pos].data<<'\t';//访问 visit[pos] = true; } q.push(pos); int v,w; while (!q.empty()){ v = q.front(); q.pop(); for (w = FirstAdjVex(g, v); w >= 0; w = NextAdjVex(g, v, w)){ if (!visit[w]){ //cout<<g.vertices[w].data<<'\t';//访问 pre[w]=v;visit[w] = true;if(strcmp(g.vertices[w].data,vName2)==0) break; q.push(w); } } if(strcmp(g.vertices[w].data,vName2)==0) break; } //cout<<endl;}/******************************题目相关****************************************/ int Count(int pre[],int n){int i,count=0;for(i=n;i!=-1;i=pre[i]) count++;return count;}int main(){//freopen("input.txt","r",stdin); ALGraph graph; CreateGraph(graph);BFSTraverse(graph, graph.vertices[0].data,graph.vertices[1].data);cout<<Count(pre,1)<<endl; return 0;}
- 北大校赛2011 Word Ladder(C题) 解题报告
- LeetCode Word Ladder解题报告
- [LeetCode]Word Ladder,解题报告
- LeetCode Word Ladder解题报告
- Leetcode Word Ladder II 解题报告
- leetcode 解题报告 Word Ladder II
- [leetcode] 127. Word Ladder 解题报告
- [leetcode] 126. Word Ladder II 解题报告
- [Leetcode] 126. Word Ladder II 解题报告
- [Leetcode] 127. Word Ladder 解题报告
- [leetcode]127. Word Ladder@Java解题报告
- Leetcode 127. Word Ladder 字符变换 解题报告
- Leetcode 126. Word Ladder II 字符变换2 解题报告
- 北大ACM校内赛解题报告
- 北大acm1002解题报告
- Word Ladder II 解题总结
- leetcode解题笔记-word-ladder (python版)
- leetcode解题笔记:127. Word Ladder
- java.util.ArrayList.contains(Object) method
- android瀑布流效果(仿蘑菇街)
- mybatis使用map传入多个参数
- Unable to find a result type for extension [...] in location attribute
- Convert Sorted List to Binary Search Tree
- 北大校赛2011 Word Ladder(C题) 解题报告
- 【Cocos2d-x 004】 在Mac下结合Xcode搭建Cocos2d-X开发环境!
- 【hdu2243】【AC自动机】【矩阵乘法】考研路茫茫——单词情结
- CCFileUtils::sharedFileUtils()->setResourceDirectory(dir) 方法的更新
- C/C++中Sqlite使用简介
- jquery弹窗遮罩
- 相机
- 初学wxPython
- 线性表代码示例2---C#